Lorsque j'ai tenté de me connecter à un serveur MySQL local pendant ma suite de tests, cela échoue avec l'erreur:
OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")
Cependant, je suis capable à tout moment de me connecter à MySQL en exécutant le mysql
programme de ligne de commande
. Un ps aux | grep mysql
indique que le serveur est en cours d'exécution et
stat /tmp/mysql.sock
confirme que le socket existe. De plus, si j'ouvre un débogueur dans la except
clause de cette exception, je suis capable de me connecter de manière fiable avec exactement les mêmes paramètres.
Ce problème se reproduit de manière assez fiable, mais il ne semble pas être à 100%, car chaque fois dans une lune bleue, ma suite de tests fonctionne en fait sans rencontrer cette erreur. Quand j'ai essayé de courir avec, sudo dtruss
il ne s'est pas reproduit.
Tout le code client est en Python, bien que je ne puisse pas comprendre en quoi cela serait pertinent.
Le passage à utiliser l'hôte 127.0.0.1
produit l'erreur:
DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)
max_connections
votre fichier de configuration MySQL?mysql -h 127.0.0.1
travail de la ligne de commande? Je ne suis pas sûr que votre serveur mysql écoute réellement sur un port TCP.mysql -h localhost
fonctionne-t-il de manière fiable?Réponses:
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.
la source
La section pertinente du manuel MySQL est ici . Je commencerais par suivre les étapes de débogage répertoriées ici.
Rappelez-vous également que localhost et 127.0.0.1 ne sont pas la même chose dans ce contexte:
localhost
, alors un socket ou un tube est utilisé.127.0.0.1
, le client est forcé d'utiliser TCP / IP.Ainsi, par exemple, vous pouvez vérifier si votre base de données écoute les connexions TCP vi
netstat -nlp
. Il semble probable qu'il écoute les connexions TCP parce que vous dites que celamysql -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, utilisezmysql -h localhost
.Si rien de tout cela ne vous aide, vous devez probablement publier plus de détails sur votre configuration MySQL, comment vous instanciez la connexion, etc.
la source
localhost
comme hôte). Changer pour le127.0.0.1
réparer.Pour moi, le problème était que je n'utilisais pas le serveur mysql. Exécutez d'abord le serveur, puis exécutez
mysql
.la source
J'ai vu cela se produire dans ma boutique lorsque mes développeurs ont un gestionnaire de pile comme MAMP installé qui est préconfiguré avec MySQL installé dans un endroit non standard.
à votre terminal
cela vous donnera votre chemin vers le fichier chaussette. prenez ce chemin et utilisez-le dans votre paramètre DATABASES HOST.
Ce que vous devez faire est de pointer votre
REMARQUE
exécutez également
which mysql_config
si vous avez en quelque sorte plusieurs instances du serveur mysql installées sur la machine que vous vous connectez peut-être à la mauvaise.la source
Je viens de changer le
HOST
delocalhost
à127.0.0.1
et cela fonctionne bien:la source
settings.py
le projet.Quand, si vous perdez votre démon mysql sous mac OSx mais est présent dans un autre chemin par exemple dans private / var exécutez la commande suivante
1)
2) redémarrez votre connexion à mysql avec:
fonctionne aussi pour mariadb
la source
Exécutez le cmd ci-dessous dans le terminal
Redémarrez ensuite la machine pour prendre effet. Ça marche!!
la source
Vérifiez le nombre de fichiers ouverts pour le processus mysql à l'aide de la commande lsof.
Augmentez la limite des fichiers ouverts et exécutez à nouveau.
la source
ulimit
augmenter le nombre de fichiers ouverts que votre client et votre serveur sont autorisés à ouvrir. si vous utilisez une version récente d'ubuntu, cela peut nécessiter d'éditer le script upstart mysql dans / etc / init, mais j'espère que vous pouvez simplement le faire dans le fichier .cnf.Après avoir essayé quelques-unes de ces solutions et sans succès, voici ce qui a fonctionné pour moi:
la source
Cela peut être l'un des problèmes suivants.
puis mettez-le dans votre code de connexion db:
/tmp/mysql.sock est le retour de grep
Solution de port mysql incorrecte: vous devez trouver le bon port mysql:
puis dans votre code:
3306 est le port renvoyé par le grep
Je pense que la première option résoudra votre problème.
la source
Pour ceux qui sont passés de la version 5.7 à la 8.0 via homebrew, cette erreur est probablement due au fait que la mise à niveau n'est pas terminée. Dans mon cas,
mysql.server start
j'ai obtenu l'erreur suivante:J'ai ensuite vérifié le fichier journal via
cat /usr/local/var/mysql/YOURS.err | tail -n 50
, et j'ai trouvé ce qui suit:Si vous êtes sur le même bateau, installez d'abord
[email protected]
via homebrew, arrêtez le serveur, puis redémarrez le système 8.0.Ensuite,
Cela permettrait à votre MySQL (8.0) de fonctionner à nouveau.
la source
ERROR! The server quit without updating PID file
.Je pense avoir vu ce même comportement il y a quelque temps, mais je ne me souviens pas des détails.
Dans notre cas, le problème était le moment où le testrunner initialisait les connexions à la base de données par rapport à la première interaction de base de données requise, par exemple, par l'importation d'un module dans settings.py ou un __init__.py. Je vais essayer de trouver quelques informations supplémentaires, mais cela pourrait déjà vous rappeler.
la source
Assurez-vous que votre / etc / hosts contient
127.0.0.1 localhost
et qu'il devrait fonctionner correctementla source
J'ai deux conjectures sournoises sur celle-ci
CONJECTURE # 1
Examinez la possibilité de ne pas pouvoir accéder au
/tmp/mysql.sock
fichier. Lorsque je configure des bases de données MySQL, je laisse normalement entrer le site de fichiers socket/var/lib/mysql
. Si vous vous connectez à mysql en tant queroot@localhost
, votre session OS doit accéder au/tmp
dossier. Assurez-vous de/tmp
disposer des droits d'accès appropriés dans le système d'exploitation. Assurez-vous également que l'utilisateur sudo peut toujours lire le fichier dans/tmp
.CONJECTURE # 2
Accéder à mysql via
127.0.0.1
peut être source de confusion si vous ne faites pas attention. Comment?Depuis la ligne de commande, si vous vous connectez à MySQL avec
127.0.0.1
, vous devrez peut-être spécifier le protocole TCP / IP.ou essayez le nom DNS
Cela contournera la connexion en tant que
root@localhost
, mais assurez-vous que vous avezroot@'127.0.0.1'
défini.La prochaine fois que vous vous connectez à MySQL, exécutez ceci:
Qu'est-ce que cela vous donne?
Si ces fonctions retournent avec les mêmes valeurs, vous vous connectez et vous authentifiez comme prévu. Si les valeurs sont différentes, vous devrez peut-être créer l'utilisateur correspondant
[email protected]
.la source
Eu ce même problème. Il s'est avéré
mysqld
avoir cessé de fonctionner (je suis sous Mac OSX). Je l'ai redémarré et l'erreur a disparu.J'ai compris que cela
mysqld
ne fonctionnait pas en grande partie à cause de ce lien: http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.htmlRemarquez le premier conseil!
la source
si vous obtenez une erreur comme ci-dessous:
Ensuite, trouvez simplement l'emplacement de votre fichier mysqld.sock et ajoutez-le à "HOST".
Comme j'utilise xampp sur Linux, mon
mysqld.sock
fichier se trouve à un autre emplacement. donc ça ne marche pas pour '/var/run/mysqld/mysqld.sock
'la source
Vérifiez que votre mysql n'a pas atteint le maximum de connexions, ou n'est pas dans une sorte de boucle de démarrage, comme cela arrive assez souvent si les paramètres sont incorrects dans my.cnf.
Utilisez ps aux | grep mysql pour vérifier si le PID change.
la source
J'ai cherché trop longtemps en ligne pour ne pas contribuer. Après avoir essayé de taper l'invite mysql à partir de la ligne de commande, je continuais à recevoir ce message:
ERREUR 2002 (HY000): impossible de se connecter au serveur MySQL local via le socket '/tmp/mysql.sock' (2)
Cela était dû au fait que mon serveur mysql local ne fonctionnait plus. Afin de redémarrer le serveur, j'ai navigué vers
où se trouvait mon mysql.server. De là, tapez simplement:
Cela relancera le serveur mysql local.
De là, vous pouvez réinitialiser le mot de passe root si nécessaire.
la source
J'ai dû tuer toutes les instances de mysql en trouvant d'abord tous les ID de processus:
Et puis les tuer:
Ensuite:
A travaillé pour moi.
la source
Le socket est situé dans / tmp. Sur le système Unix, en raison des modes et des propriétés sur / tmp, cela pourrait causer des problèmes. Mais, tant que vous nous dites que vous POUVEZ utiliser votre connexion mysql normalement, je suppose que ce n'est pas un problème sur votre système. Une vérification primaire devrait être de déplacer mysql.sock dans un répertoire plus neutre.
Le fait que le problème se produise «au hasard» (ou pas à chaque fois) me laisse penser qu'il pourrait s'agir d'un problème de serveur.
Votre / tmp est-il situé sur un disque standard ou sur un support exotique (comme dans la RAM)?
Votre / tmp est-il vide?
Est
iotop
-ce que quelque chose ne va pas lorsque vous rencontrez le problème?la source
Configurez votre connexion DB dans la boîte de dialogue 'Manage DB Connections. Sélectionnez «Standard (TCP / IP)» comme méthode de connexion.
Voir cette page pour plus de détails http://dev.mysql.com/doc/workbench/en/wb-manage-db-connections.html
Selon cette autre page, un fichier socket est utilisé même si vous spécifiez localhost.
Il montre également comment vérifier sur votre serveur en exécutant ces commandes:
la source
dans ubuntu14.04, vous pouvez le faire pour résoudre ce problème.
la source
Pour moi, je suis sûr que mysqld est démarré et que la ligne de commande mysql peut fonctionner correctement. Mais le serveur httpd montre le problème (impossible de se connecter à mysql via socket).
J'ai démarré le service avec mysqld_safe &.
enfin, j'ai trouvé que lorsque je démarre le service mysqld avec le service mysqld start, il y a des problèmes (problème d'autorisation selinux), et quand je corrige le problème selinux et que je démarre mysqld avec "service mysqld start", le problème de connexion httpd disparaît. Mais quand je démarre le mysqld avec mysqld_safe &, mysqld peut fonctionner. (le client mysql peut fonctionner correctement). Mais il y a toujours des problèmes lors de la connexion avec httpd.
la source
S'il s'agit d'un socket, lisez ce fichier
et voyez quel est l'emplacement de socket standard. C'est une ligne comme:
créez maintenant un alias pour votre shell comme:
De cette façon, vous n'avez pas besoin de privilèges root.
la source
Essayez simplement de courir
mysqld
.C'était ce qui ne fonctionnait pas pour moi sur mac. Si cela ne fonctionne pas, essayez
/usr/local/var/mysql/<your_name>.err
de consulter les journaux d'erreurs détaillés.la source
Peut être utile.
la source
Utilisation de MacOS Mojave 10.14.6 pour MySQL 8.0.19 installé via Homebrew
sudo find / -name my.cnf
/usr/local/etc/my.cnf
A travaillé pendant un certain temps, puis l'erreur est finalement retournée. Désinstallé la version Homebrew de MySQL et installé le fichier .dmg directement à partir d' ici
Heureusement connecté depuis.
la source
Dans mon cas, ce qui a aidé était de modifier le fichier
/etc/mysql/mysql.conf.d/mysqld.cnf
et de remplacer la ligne:avec
Ensuite, j'ai redémarré le serveur et cela a bien fonctionné. Le plus drôle, c'est que si je remets la ligne comme avant et que je la redémarre, cela fonctionne toujours.
la source
J'avais été confronté à un problème similaire récemment. J'ai parcouru de nombreuses réponses. Je l'ai fait fonctionner en suivant les étapes.
la source
Pour moi, le serveur mysql ne fonctionnait pas. Alors, j'ai démarré le serveur mysql via
puis
mysql_secure_installation
pour sécuriser le serveur et maintenant je peux visiter le serveur MySQL via
sudo mysql -uroot -p
la source