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?
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",
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.
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.