165 votes

Impossible de se connecter au serveur MySQL local via le socket '/tmp/mysql.sock

Quand j'ai tenté de vous connecter à un serveur MySQL local lors de mon test de la suite, il échoue avec l'erreur:

OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")

Cependant, je suis en mesure à tout moment, de se connecter à MySQL en exécutant la ligne de commande mysql programme. Un ps aux | grep mysql indique que le serveur est en cours d'exécution, et stat /tmp/mysql.sock confirmer que le support existe. De plus, si j'ouvre un débogueur en except clause de cette exception, je suis en mesure de connecter de manière fiable avec exactement les mêmes paramètres.

Ce problème se reproduit de façon relativement fiable, mais il ne semble pas être à 100%, parce que chaque fois dans une lune bleue, mon test de la suite ne fait exécuter sans en cliquant sur cette erreur. Quand j'ai essayé de courir avec des sudo dtruss il n'a pas le droit de reproduire.

Tout le code du client est en Python, mais je ne peux pas comprendre comment ce serait pertinent.

Commutation utiliser host 127.0.0.1 produit l'erreur:

DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)

170voto

Pratyay Points 321
 sudo /usr/local/mysql/support-files/mysql.server start 
 

Cela a fonctionné pour moi. Cependant, si cela ne fonctionne pas, assurez-vous que mysqld est en cours d'exécution et essayez de vous connecter.

137voto

jtoberon Points 3928

La section correspondante du manuel MySQL est ici. J'aimerais commencer par passer par le débogage des étapes qui y sont énumérés.

Aussi, n'oubliez pas que localhost et 127.0.0.1 ne sont pas la même chose, dans ce contexte:

  • Si l'hôte est défini à l' localhost, puis une douille ou un tuyau est utilisé.
  • Si l'hôte est défini à l' 127.0.0.1, alors le client est obligé d'utiliser le protocole TCP/IP.

Ainsi, par exemple, vous pouvez vérifier si votre base de données est à l'écoute pour les connexions TCP vi netstat -nlp. Il semble probable qu'il EST à l'écoute pour les connexions TCP, parce que vous dites qu' mysql -h 127.0.0.1 fonctionne très bien. Pour vérifier si vous pouvez vous connecter à votre base de données via des sockets, utilisez mysql -h localhost.

Si aucun de cette aide, alors vous avez probablement besoin d'afficher plus de détails au sujet de votre config MySQL, exactement de la façon dont vous êtes l'instanciation de la connexion, etc.

29voto

Francis Yaconiello Points 6212

J'ai vu cela arriver à mon atelier lors de mes devs ont un gestionnaire de pile comme MAMP installé qui est préconfiguré avec MySQL installé dans un cadre non standard.

de votre terminal exécuter

mysql_config --socket

que vous donnera votre chemin à la chaussette de fichier. prendre ce chemin et l'utiliser dans vos BASES de données de l'HÔTE paramater.

Ce que vous devez faire est de pointer votre

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'test',
        'PASSWORD': 'test',
        'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock',
        'PORT': '',
    },
}

NOTE

également exécuter which mysql_config si vous en quelque sorte plusieurs instances de serveur mysql installé sur la machine, vous pouvez connecter le mauvais.

7voto

hsen Points 399

Vérifiez le nombre de fichiers ouverts pour le processus mysql à l'aide de la commande lsof.

Augmentez la limite de fichiers ouverts et exécutez à nouveau.

4voto

Martin Points 86

Je pense que j'ai vu ce même comportement il y a quelques temps, mais ne me souviens pas des détails.
Dans notre cas, le problème a été le moment le lanceur initialise connexions de base de données relative à la première base de données d'interaction nécessaire, par exemple, par l'importation d'un module dans settings.py ou certains __init__.py. Je vais essayer de plonger un peu plus d'info, mais il peut déjà faire sonner une cloche pour votre cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X