2011-01-11 22 views
15

Soy nuevo en esto así que probablemente tenga la terminología equivocada, pero cuando ejecuto el script siguiente:No puede conectarse al servidor local usando MySQLdb de Python

import MySQLdb 

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

me sale el error:

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

No hay un archivo llamado mysql.sock en ese directorio pero no sé qué es un socket o cómo especificar la ubicación correcta para él usando el módulo MySQLdb.

+0

Puede ahorrar más tiempo si aparece el código de error (2) en el mensaje de error. 2 significa archivo no encontrado: # perror 2 Código de error del sistema operativo 2: No existe ningún archivo o directorio – akuzminsky

Respuesta

23

si su toma de MySQL no se coloca en /tmp/mysql.sock, se puede especificar con

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

de edición: para MAMP en macosx la ruta del socket mysql debería ser algo así como /Applications/MAMP/tmp/mysql/mysql.sock

+0

¿Cómo puedo encontrar mi socket? – erin

+2

usando 'mysql_config --socket' en su shell debería hacer, o/ruta/a/mysql/bin/mysql_config si lo instaló en/opt o algo – roman

+0

Lo siento si no se supone que debo hacer preguntas de seguimiento - Solo ignórame si es mala etiqueta. Cuando escribo mysql_config --socket la respuesta es '/tmp/mysql.sock' – erin

34

He logrado resolver esto estableciendo mi host en "127.0.0.1" en lugar de "localhost".

+0

¿Alguna vez descubrió por qué era esto? Funcionó para mí también. – johnharris85

+7

Esto funciona porque cuando especifica 'localhost', intenta conectarse a través de sockets Unix, mientras que cuando se conecta a través de' 127.0.0.1' intenta conectarse a través de TCP/IP estándar. Sin embargo, si especifica 'localhost', entonces usará'/tmp/mysql.sock' por defecto a menos que especifique lo contrario. – daviewales

+1

F *** YA! Gracias Matt. Estuve atascado en esto durante 3 días y tú eras la solución final – IdeoREX

Cuestiones relacionadas