12 votes

Mysql ne démarre pas mysqld.sock est absent

Après avoir redémarré mon serveur, tout a démarré normalement sauf "mysql", j'ai essayé de le démarrer manuellement " /etc/init.d/mysql restart "ou avec " service mysql restart ", il échoue

Dans le fichier journal, il est dit :

Jul 16 08:13:38 localhost /etc/init.d/mysql[18136]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Jul 16 08:13:38 localhost /etc/init.d/mysql[18136]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

J'ai vérifié ce chemin, mais je n'ai pas trouvé ce fichier socket, merci de me conseiller ?

3voto

Peter Nduati Points 334

Pour trouver tous les fichiers socket sur votre système, exécutez :

sudo find / -type s

Mon système de serveur Mysql avait le socket ouvert à /var/lib/mysql/mysql.sock

Une fois que vous avez trouvé l'endroit où le socket est ouvert, ajoutez ou modifiez la ligne dans votre fichier /etc/my.cnf avec le chemin d'accès au fichier de socket :

socket=/var/lib/mysql/mysql.sock

Parfois, le script de démarrage du système qui a lancé l'exécutable de la ligne de commande spécifie un drapeau --socket=path . Ce drapeau peut remplacer l'option my.cnf et cela aurait pour conséquence qu'un socket ne serait pas trouvé là où le fichier my.cnf indique qu'il devrait être. Ensuite, lorsque vous essayez d'exécuter le client de ligne de commande mysql, il lira my.cnf pour trouver le socket, mais il ne le trouvera pas puisqu'il s'écarte de l'endroit où le serveur en a créé un. Donc, à moins que vous ne vous souciiez de l'endroit où se trouve le socket, le simple fait de changer le my.cnf pour qu'il corresponde devrait fonctionner.

Si vous êtes un super utilisateur du système Linux, sur la base de ce qui précède, faites simplement ceci :

kill -9 <pid_of_mysql>

ou parfois vous pouvez faire ça :

pkill -9 mysqld

Après avoir fait cela, vous pouvez chercher un fichier pid dans le dossier /var/run/mysqld/ et le supprimer

Assurez-vous que les permissions sur votre socket sont telles que l'utilisateur sous lequel mysqld est exécuté peut lire/écrire dessus. Un test facile est de l'ouvrir en lecture/écriture complète et de voir si cela fonctionne toujours :

chmod 777 '/var/run/mysqld/mysqld.sock'

Si cela résout le problème, vous pouvez adapter les autorisations et la propriété du socket en fonction de vos paramètres de sécurité.

De plus, le répertoire dans lequel réside le socket doit être accessible par l'utilisateur qui exécute le processus mysqld.

Référence : https://stackoverflow.com/questions/11990708/error-cant-connect-to-local-mysql-server-through-socket-var-run-mysqld-mysq

3voto

SK-logic Points 6952

J'ai essayé de démarrer mysql en "Safe Mode" pour créer le fichier sock et le fichier pid, mais cela échoue pour une erreur "bind",

  1. J'ai changé l'adresse IP dans le paramètre "bind ip" de my.cnf en localhost.
  2. J'ai démarré mysql en mode sans échec.
  3. J'ai redémarré mysql en mode normal, et tout s'est bien passé.

1voto

sreejith KB Points 11

Oui, comme indiqué ci-dessus, localisez d'abord votre fichier socket. #find / -type s Si vous avez trouvé un fichier mysqld.sock dans le répertoire /var/run/mysqld/, vérifiez si des instances de mysqld sont en cours d'exécution ou non. #netstat -anpt | grep 3306 or #ps aux | grep mysqld Si vous trouvez un processus en cours d'exécution, arrêtez-le (#kill -9 pid) et supprimez le fichier socket. Ensuite, essayez de le redémarrer et si mysql ne crée pas de fichier socket, essayez de le démarrer comme suit

#/usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf --basedir=/usr --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock

Vérifiez également votre fichier my.cnf (/etc/mysql/my.cnf) et commentez le champ bind-address, et si vous trouvez un champ skip-network commentez-le.

1voto

vizaie Points 1

J'ai eu un problème similaire lorsque j'ai redémarré mon ordinateur portable (Ubuntu 20.04 LTS) il y a un échec dans le démarrage de MySQL. Tout ce que je sais, c'est que mysqld.sock est manquant.

Pour trouver tous les fichiers de socket dans un système, faites

sudo find / -type s

et vérifiez s'il y a un fichier mysqld.sock. S'il y a mysqld.sock ailleurs alors lisez la solution aquí .

S'il n'y a pas de fichier mysqld.sock quelque part, suivez la procédure.

Par défaut, mysql a mysqld.sock dans '/var/run/mysqld/'. Si vous ne trouvez pas mysqld.sock quelque part, vérifiez le répertoire mysqld dans '/var/run/'. Pour moi, le répertoire mysqld est manquant. Pour le récupérer, ouvrez le terminal et faites

sudo dpkg-reconfigure mysql-server-*version*

Après cela mysqld Le dossier devrait être de retour à /var/run/ . mysqld.sock se trouve dans le fichier mysqld dossier. Vérifiez le statut avec sudo service mysql status .

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