2011-01-11 17 views
15

io sono nuovo a questo modo probabilmente la terminologia sbagliata, ma quando ho eseguito il seguente script:Impossibile connettersi a localhost utilizzando Python MySQLdb

import MySQLdb 

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

ottengo l'errore:

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

Non c'è un file chiamato mysql.sock in quella directory ma non so cosa sia un socket o come specificare la posizione corretta usando il modulo MySQLdb.

+0

È possibile risparmiare più tempo se si nota il codice di errore (2) nel messaggio di errore. 2 significa file non trovato: # perror 2 Codice errore OS 2: Nessun file o directory – akuzminsky

risposta

23

se la vostra presa di MySQL non è collocato in /tmp/mysql.sock, è possibile specificare con

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

edit: per MAMP su macosx il percorso del socket mysql dovrebbe essere qualcosa come /Applications/MAMP/tmp/mysql/mysql.sock

+0

Come trovo il mio socket? – erin

+2

usando 'mysql_config --socket' nella shell dovrebbe fare, o/percorso/a/mysql/bin/mysql_config se lo hai installato in/opt o qualcosa di – roman

+0

Mi dispiace se non dovrei chiedere domande di follow-up - Ignora solo se è una cattiva etichetta. Quando digito mysql_config --socket la risposta è '/tmp/mysql.sock' – erin

34

Sono riuscito a risolvere questo impostando il mio host su "127.0.0.1" anziché su "localhost".

+0

Hai mai scoperto perché era? Ha funzionato anche per me. – johnharris85

+7

Funziona perché quando si specifica 'localhost', tenta di connettersi tramite i socket unix, mentre quando ci si connette tramite' 127.0.0.1' tenta di connettersi tramite TCP/IP standard. Tuttavia, se si specifica 'localhost', verrà utilizzato il valore predefinito'/tmp/mysql.sock' a meno che non venga specificato diversamente. – daviewales

+1

F *** YA! Grazie Matt. Sono stato bloccato su questo per 3 giorni e tu eri la soluzione finale – IdeoREX

Problemi correlati