77 votes

centos : Un autre démon MySQL fonctionne déjà avec le même socket unix.

J'ai une erreur étrange lors du démarrage du service mysqld :

Another MySQL daemon already running with the same unix socket.

J'ai essayé de lister les services en cours d'exécution et de les arrêter mais la même erreur se produit au démarrage du service mysqld.

Je peux essayer de supprimer le mysqld et de le réinstaller mais est-ce que cela supprimera aussi la base de données ?

228voto

GeckoSEO Points 1824

Pour éviter que le problème ne se produise, vous devez effectuer un arrêt progressif du serveur à partir de la ligne de commande plutôt que de mettre le serveur hors tension.

# shutdown -h now

Cela arrêtera les services en cours d'exécution avant de mettre la machine hors tension.

Sous Centos, une méthode supplémentaire pour le remettre en marche lorsque vous rencontrez ce problème consiste à déplacer mysql.sock :

# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

# service mysqld start

Le redémarrage du service crée une nouvelle entrée appelée mqsql.sock

5 votes

La deuxième recommandation ci-dessus a fonctionné pour moi. Cela a dû se produire parce que je n'ai pas fermé le serveur de manière élégante. En faisant un # reboot n'a pas résolu le problème. Je n'ai jamais essayé le shutdown -h now

5 votes

"shutdown -h now" et boot n'ont pas résolu le problème pour moi mais l'option "CentOS" a fonctionné comme un charme.

2 votes

Effectuer le # mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak puis # shutdown -h now et ça devrait être bon.

19voto

iconoclast Points 3743

TL;DR :

Exécutez-le en tant que Root et vous serez prêt :

rm $(grep socket /etc/my.cnf | cut -d= -f2)  && service mysqld start

Version plus longue :

Vous pouvez trouver l'emplacement du fichier socket de MySQL en fouillant manuellement dans le dossier /etc/my.conf ou simplement en utilisant

grep socket /etc/my.cnf | cut -d= -f2

Il est probable que /var/lib/mysql/mysql.sock . Ensuite (comme Root, bien sûr, ou avec sudo prepended) supprimer ce fichier :

rm /var/lib/mysql/mysql.sock

Ensuite, démarrez le démon MySQL :

service mysqld start

Suppression de mysqld ne répondra pas du tout au problème. Le problème est que CentOS & RedHat ne nettoient pas les sock après un crash, donc vous devez le faire vous-même. Éviter d'éteindre votre système est (bien sûr) également conseillé, mais parfois vous ne pouvez pas l'éviter, alors cette procédure résoudra le problème.

0 votes

El cut -d= -f2 peut sembler erroné, car on s'attendrait à ce qu'une valeur apparaisse après la balise = mais le = es la valeur passée à la -d option : en d'autres termes, = est utilisé comme délimiteur pour cut .

0 votes

Si vous êtes sur Ubuntu, essayez de remplacer /etc/my.cnf con /etc/mysql/my.cnf .

0 votes

Je suggérerais de rechercher quelque chose de plus spécifique que toute ligne contenant le mot prise de courant au moins grep '^socket[[:space:]]=' /etc/my.cnf ou vous risquez d'effacer quelque chose que vous n'aviez pas prévu.

4voto

Mas Points 306

J'ai trouvé une solution pour tous ceux qui ont ce problème Changez le répertoire de socket à un nouvel emplacement dans le fichier my.cnf.

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

et service mysqld start

ou le moyen rapide comme GeckoSEO a répondu

# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

# service mysqld start

8 votes

J'ai juste supprimé le fichier mysql.sock et ensuite redémarré le service.

3voto

user3076142 Points 49

La solution que j'ai trouvée est un reste de mysql.sock dans le répertoire /var/lib/mysql/ suite à un arrêt brutal. Mysql pensait qu'il était déjà en cours d'exécution alors qu'il ne l'était pas.

0 votes

Oui, vous avez raison, j'ai arrêté le système et ce problème est apparu. Vous avez donc une solution pour que le serveur ne montre pas cette erreur quand je le démarre.

2voto

Paul Points 11

Il suffit d'ouvrir un rapport de bogue auprès du fournisseur de votre système d'exploitation pour lui demander de placer la socket dans /var/run afin qu'elle soit automatiquement supprimée au redémarrage. C'est un bogue de garder ce socket après un redémarrage non nettoyé, /var/run est l'endroit pour ce genre de fichiers.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X