Не удается подключиться к локальному хосту с помощью Python MySQLdb

Я новичок в этом, поэтому, вероятно, у меня неправильная терминология, но когда я запускаю следующий скрипт:

import MySQLdb

conn = MySQLdb.connect (host = 'localhost',
   user = 'erin',
   passwd = 'erin',
          db = 'sec')

Я получаю сообщение об ошибке:

  File "/Library/Python/2.6/site-packages/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/Library/Python/2.6/site-packages/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")

В этом каталоге нет файла с именем mysql.sock, но я не знаю, что такое сокет или как указать для него правильное местоположение с помощью модуля MySQLdb.


person erin    schedule 11.01.2011    source источник
comment
Вы могли бы сэкономить больше времени, если бы заметили код ошибки (2) в сообщении об ошибке. 2 означает, что файл не найден: # perror 2 Код ошибки ОС 2: Нет такого файла или каталога   -  person akuzminsky    schedule 04.03.2014


Ответы (3)


Мне удалось решить эту проблему, установив для моего хоста значение «127.0.0.1», а не «localhost».

person k0nG    schedule 03.09.2012
comment
Это работает, потому что когда вы указываете localhost, он пытается подключиться через сокеты unix, а когда вы подключаетесь через 127.0.0.1, он пытается подключиться через стандартный TCP/IP. Однако, если вы укажете localhost, будет использоваться значение по умолчанию /tmp/mysql.sock, если вы не укажете иное. - person daviewales; 28.06.2013
comment
Я проверил и обнаружил, что localhost будет быстрее, чем 127.0.0.1, потому что localhost использует локальный unix_socket. поэтому я предпочитаю римский ответ. - person Yuda Prawira; 29.08.2017

если ваш сокет mysql не находится в /tmp/mysql.sock, вы можете указать его с помощью

conn = MySQLdb.connect (unix_socket = 'path_to_your_socket', host = 'localhost', user = 'erin', passwd = 'erin', db = 'sec')

изменить: для mamp на macosx путь к сокету mysql должен быть чем-то вроде /Applications/MAMP/tmp/mysql/mysql.sock

person roman    schedule 11.01.2011
comment
следует использовать mysql_config --socket в вашей оболочке или /path/to/mysql/bin/mysql_config, если вы установили его в /opt или что-то в этом роде - person roman; 11.01.2011
comment
Извините, если я не должен задавать дополнительные вопросы — просто игнорируйте меня, если это нарушение этикета. Когда я набираю mysql_config --socket, ответ будет "/tmp/mysql.sock" - person erin; 12.01.2011
comment
ваш сервер mysql действительно работает? - person roman; 12.01.2011
comment
да. Я использую МАМП. Я могу что-то делать с базой данных через phpmyadmin. - person erin; 12.01.2011
comment
ааа, mamp особенный, так как он имеет автономную установку mysql - см. дополнение к комментарию выше - person roman; 12.01.2011
comment
если вы используете MAMP, скорее всего, вы найдете файл sock здесь /Applications/MAMP/tmp/mysql/mysql.sock удачи - person rroche; 09.05.2012
comment
И если вы используете lampp, он находится в: /opt/lampp/var/mysql/mysql.sock - person Wissem; 09.12.2012
comment
Я запускаю XAMPP и нашел файл сокета, запустив ps -A | grep мсикл. Это показывает команду, используемую XAMPP для запуска MySQL, которая включает аргумент --socket. (На Mac это /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock) - person daviewales; 28.06.2013

Ваша установка mysql, вероятно, поместила сокет в другое место. Вы можете настроить это в своих файлах конфигурации mysql.

Возможно, вы захотите проверить этот аналогичный пост: Установка mysql на leopard: не удается подключиться к локальному серверу MySQL через сокет

person Ryan    schedule 11.01.2011