2011-01-11 3 views
15

Python Je suis nouveau à cela donc probablement la mauvaise terminologie, mais quand je lance le script suivant:Impossible de se connecter à localhost en utilisant MySQLdb

import MySQLdb 

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

Je reçois l'erreur:

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

Il n'y a pas de fichier appelé mysql.sock dans ce répertoire mais je ne sais pas ce qu'est un socket ou comment spécifier l'emplacement correct pour celui-ci en utilisant le module MySQLdb.

+0

Vous pourriez gagner plus de temps si vous avez remarqué le code d'erreur (2) dans le message d'erreur. 2 signifie que le fichier est introuvable: # perror 2 Code d'erreur du système d'exploitation 2: Aucun fichier ou répertoire – akuzminsky

Répondre

23

si votre prise mysql est pas placé dans /tmp/mysql.sock, vous pouvez spécifier avec

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

modifier: pour MAMP sur macosx, le chemin du socket mysql devrait ressembler à /Applications/MAMP/tmp/mysql/mysql.sock

+0

Comment puis-je trouver mon socket? – erin

+2

en utilisant 'mysql_config --socket' dans votre shell devrait faire, ou/chemin/vers/mysql/bin/mysql_config si vous l'avez installé dans/opt ou quelque chose – roman

+0

Je suis désolé si je ne suis pas supposé poser des questions de suivi - ignore moi si c'est une mauvaise étiquette. Quand je tape mysql_config --socket, la réponse est '/tmp/mysql.sock' – erin

34

J'ai réussi à résoudre ce problème en réglant mon hôte sur "127.0.0.1" plutôt que sur "localhost".

+0

Avez-vous déjà trouvé pourquoi c'était? Il a travaillé pour moi aussi. – johnharris85

+7

Cela fonctionne parce que lorsque vous spécifiez 'localhost', il essaie de se connecter via des sockets unix, alors que lorsque vous vous connectez via' 127.0.0.1', il essaie de se connecter via TCP/IP standard. Cependant, si vous spécifiez 'localhost', alors il utilisera la valeur par défaut'/tmp/mysql.sock', sauf indication contraire. – daviewales

+1

F *** YA! Merci Matt. J'ai été bloqué sur cela pendant 3 jours et vous étiez la solution finale – IdeoREX

Questions connexes