2011-01-11 15 views
15

Jestem nowy w tym więc prawdopodobnie mają złą terminologię, ale kiedy uruchomić następujący skrypt:nie można połączyć się z localhost przy użyciu Pythona MySQLdb

import MySQLdb 

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

pojawia się błąd:

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)") 

W tym katalogu nie ma pliku o nazwie mysql.sock, ale nie wiem, co to jest gniazdo lub jak określić poprawną lokalizację za pomocą modułu MySQLdb.

+0

Możesz zaoszczędzić więcej czasu, jeśli zauważysz kod błędu (2) w komunikacie o błędzie. 2 oznacza, że ​​plik nie został znaleziony: # perror 2 Kod błędu OS 2: Brak takiego pliku lub katalogu – akuzminsky

Odpowiedz

23

jeśli gniazdo mysql nie jest umieszczona w /tmp/mysql.sock, można określić ją

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

edit: dla MAMP na macosxie ścieżka do mysql powinna być czymś podobnym do /Applications/MAMP/tmp/mysql/mysql.sock

+0

Jak znaleźć moje gniazdo? – erin

+2

używając 'mysql_config --socket' w twojej powłoce powinien zrobić, lub/path/to/mysql/bin/mysql_config jeśli zainstalowałeś go w/opt lub coś takiego – roman

+0

Przepraszam, jeśli nie powinienem zadawać kolejnych pytań - po prostu mnie ignoruj, jeśli to zła etykieta. Kiedy wpisuję mysql_config --socket, odpowiedź brzmi "/tmp/mysql.sock" – erin

34

Udało mi się to rozwiązać, ustawiając mój host na "127.0.0.1" zamiast "localhost".

+0

Czy kiedykolwiek dowiedziałeś się, dlaczego tak się stało? To działało również dla mnie. – johnharris85

+7

Działa to, ponieważ gdy podasz 'localhost', spróbujesz połączyć się przez gniazda unix, podczas gdy po połączeniu przez' 127.0.0.1' spróbujesz połączyć się przez standardowy TCP/IP. Jeśli jednak podasz 'localhost', użyje on domyślnego'/tmp/mysql.sock', chyba że określisz inaczej. – daviewales

+1

F *** YA! Dziękuję Matt. Utknąłem na tym przez 3 dni i byłeś ostatecznym rozwiązaniem – IdeoREX

Powiązane problemy