2 votes

Impossible de se connecter au serveur MySQL local via un socket

J'ai essayé de régler les performances d'un serveur mysql en cours d'exécution en exécutant cette commande :

mysqld_safe --key_buffer_size=64M --table_cache=256 --sort_buffer_size=4M --read_buffer_size=1M &

Après cela, je ne peux pas me connecter à mysql à partir du serveur où mysql est exécuté. J'obtiens cette erreur :

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

Cependant, heureusement, je peux toujours me connecter à mysql à distance. Ainsi, tous mes serveurs web ont toujours accès à mysql et fonctionnent sans aucun problème. Pour cette raison, je ne veux pas essayer de redémarrer le serveur mysql, car cela risque de tout gâcher.

Maintenant je sais que mysqld_safe démarre le serveur mysql, et comme le serveur mysql était déjà en fonctionnement, je suppose qu'il s'agit d'une sorte de problème avec deux serveurs mysql en fonctionnement et écoutant sur le même port.

Existe-t-il un moyen de résoudre ce problème sans redémarrer le serveur mysql initial ?

UPDATE : C'est ce que ps xa | grep "mysql" dit :

11672 ?        S      0:00 /bin/sh /usr/bin/mysqld_safe
11780 ?        Sl   175:04 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
11781 ?        S      0:00 logger -t mysqld -p daemon.error
12432 pts/0    R+     0:00 grep mysql

MISE À JOUR 2 : J'ai essayé de redémarrer maintenant. L'arrêt a bien fonctionné mais le démarrage a échoué. À ma grande surprise, le serveur mysql fonctionne toujours sans problème, donc je ne sais pas vraiment ce qu'il a arrêté.

MISE À JOUR 3 : Je suis presque sûr que c'est le problème maintenant : Quand j'ai lancé mysql la première fois, il a écrit son processid dans /var/run/mysqld/mysqld.pid et le socket dans /var/run/mysqld/mysqld.sock.

Ensuite, lorsque j'ai exécuté la commande mysqld_safe, elle a supprimé ces fichiers. Maintenant je ne peux pas arrêter le serveur mysql car la commande stop a besoin de ces fichiers. Existe-t-il un moyen de restaurer ces fichiers ? Je suppose que le fichier pid est juste un fichier avec l'identifiant du processus ? Je ne veux pas simplement tuer le processus parce qu'il y a beaucoup d'écritures sur ce serveur et tuer mysql finit généralement par corrompre les bases de données.

5voto

michael silva Points 41

Vérifiez le bind-address あなたの中の my.cnf . Il devrait être 0.0.0.0 afin d'autoriser les connexions locales et distantes.

Vérifiez avec ps xa | grep mysql combien d'instances sont exécutées.

Editar
Apparemment :

Un client MySQL sous Unix peut se connecter au serveur mysqld de deux manières différentes : En utilisant un fichier socket Unix pour se connecter via un fichier du système de fichiers (par défaut /tmp/mysql.sock), ou en utilisant TCP/IP, qui se connecte via un numéro de port. Une connexion par fichier de socket Unix est plus rapide que TCP/IP, mais ne peut être utilisée que pour se connecter à un serveur sur le même ordinateur. Un fichier de socket Unix est utilisé si vous ne spécifiez pas de nom d'hôte ou si vous spécifiez le nom d'hôte spécial localhost.

Siehe aquí pour un conseil utile.

Edit2
L'une des raisons possibles de Can't connect to local MySQL server c'est ce qui semble être le problème ici :

Quelqu'un a supprimé le fichier socket Unix que mysqld utilise (/tmp/mysql.sock par défaut). Par exemple, vous pouvez avoir une tâche cron qui supprime les anciens fichiers du répertoire /tmp. Vous pouvez toujours exécuter la version de mysqladmin pour vérifier si le fichier socket Unix que mysqladmin essaie d'utiliser existe réellement. La solution dans ce cas est de modifier le travail cron pour ne pas supprimer mysql.sock ou pour placer le fichier socket ailleurs. Voir la Section B.5.4.5, " Comment protéger ou modifier le fichier socket Unix de MySQL ".

Martin, assure-toi que tu as socket = /var/run/mysqld/mysqld.sock dans my.cnf, je pense que mysqld restart résoudra votre problème, il devrait recréer mysqld.sock et vous devriez pouvoir vous connecter localement.

2voto

Goran Points 3996

Que trouve-t-on dans votre journal d'erreurs mysql (les différentes distributions ont des emplacements différents) ?

Quels sont les paramètres de votre instance ? Connectez-vous à mysql et exécutez la commande

show global variabes

Attention aux variables socket y log-error

EDIT : Si mysql est en cours d'exécution et que vous pouvez vous y connecter, vous pouvez le fermer en utilisant la commande

mysqladmin shutdown

1voto

Levi Points 195

Ajoutez simplement le drapeau -h avec votre nom d'hôte lors de la connexion pour voir si cela fonctionne. Essayez également d'ajouter l'option --socket= à MySQLd.

mysql -h myserver.null.com -P 3306 -u bob -P dbname

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X