web-dev-qa-db-fra.com

Mysql ne démarre pas mysqld.sock est manquant

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 indiqué:

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, veuillez le conseiller?

8
MohammedSimba

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

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

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'emplacement d'ouverture du socket, ajoutez ou modifiez la ligne dans votre /etc/my.cnf fichier avec le chemin d'accès au fichier socket:

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

Parfois, le script de démarrage du système qui a lancé l'exécutable de ligne de commande spécifie un indicateur --socket=path. Ce drapeau pourrait remplacer le my.cnf emplacement, ce qui entraînerait la non-localisation d'un socket 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 car il s'écarte de l'endroit où le serveur en a créé un. Donc, sauf si vous vous souciez de l'emplacement du socket, il suffit de modifier le fichier my.cnf pour qu'il corresponde.

Si vous êtes super utilisateur dans le système Linux, basé sur ce qui précède, faites ceci:

kill -9 <pid_of_mysql>

ou parfois vous pouvez le faire:

pkill -9 mysqld

Après cela, vous pouvez rechercher un fichier pid dans /var/run/mysqld/ et supprimez-le

Assurez-vous que les autorisations sur votre socket sont telles que tout utilisateur mysqld en cours d'exécution peut lire/écrire dessus. Un test simple consiste à l'ouvrir en lecture/écriture complète et à voir si cela fonctionne toujours:

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

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

De plus, le répertoire dans lequel se trouve le socket doit être accessible par l'utilisateur exécutant le processus mysqld.

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

3
Peter Nduati

oui, comme indiqué ci-dessus, localisez d'abord votre fichier socket #find / -type s, si vous avez trouvé un fichier mysqld.sock sous le répertoire/var/run/mysqld /, vérifiez si des instances de mysqld fonctionnent ou non #netstat -anpt | grep 3306 or #ps aux | grep mysqld si vous avez trouvé un processus en cours, 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

#/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 avez trouvé un champ skip-network, commentez-le.

1
sreejith KB