376 votes

error : 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- Missing /var/run/mysqld/mysqld.sock

Mon problème a commencé par le fait que je ne pouvais plus me connecter en tant que Root sur mon installation mysql. J'ai essayé d'exécuter mysql sans que les mots de passe soient activés... mais à chaque fois que je lançais la commande

# mysqld_safe --skip-grant-tables &

Je n'aurais jamais récupéré le prompteur. J'essayais de suivre ces instructions pour récupérer le mot de ce mot de passe .

L'écran ressemble à ceci :

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

et je n'obtiens pas d'invite pour commencer à taper les commandes SQL pour réinitialiser le mot de passe.

Quand je le tue en appuyant sur CTRL + C j'obtiens le message suivant :

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

Si je réessaie la commande et que je la laisse suffisamment longtemps, j'obtiens la série de messages suivante :

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

Mais ensuite, si j'essaie de me connecter en tant que Root en faisant :

# mysql -u root

Je reçois le message d'erreur suivant :

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

J'ai vérifié et /var/run/mysqld/mysqld.sock Le fichier n'existe pas. Le dossier existe, mais pas le fichier.

Aussi, je ne sais pas si ça peut aider ou non, mais j'ai exécuté find / -name mysqld et ça a donné :

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

Je suis novice en matière de Linux et de MySQL, je ne sais donc pas si c'est normal ou non. Mais j'inclus cette information au cas où elle serait utile.

J'ai finalement décidé de désinstaller et de réinstaller mysql.

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

Après avoir réinstallé tous les paquets dans le même ordre que ci-dessus, pendant l'installation de phpmyadmin, j'ai obtenu la même erreur :

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

J'ai donc essayé à nouveau de désinstaller/réinstaller. Cette fois, après avoir désinstallé les paquets, j'ai également renommé manuellement tous les fichiers et répertoires mysql en mysql.bad dans leurs emplacements respectifs.

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

Puis j'ai essayé de réinstaller mysql-server y mysql-client à nouveau. Mais j'ai remarqué qu'il ne me demande pas de mot de passe. N'est-il pas censé demander un mot de passe administrateur ?

0 votes

J'ai le même problème. Je viens de le résoudre. stackoverflow.com/questions/18150858/

3 votes

0 votes

Résolu en redémarrant simplement le serveur, puis en redémarrant le service mysql

320voto

Fat Fish Points 129

Essayez cette commande,

sudo service mysql start

0 votes

+1 my.cnf pointait vers les bons répertoires, par le service mysql était mort.

0 votes

J'ai essayé la réponse acceptée mais je ne trouvais pas le mysql.sock, ceci a fonctionné pour moi. Je vous remercie

2 votes

J'ai dû utiliser sudo service mysqld start

220voto

Ray Points 12928

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é où le socket est ouvert, ajoutez ou modifiez la ligne de votre fichier /etc/my.cnf 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 la ligne de commande spécifie un drapeau --socket=path . Ce drapeau pourrait remplacer l'emplacement de 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.

Ensuite, arrêtez le processus mysqld. La façon de procéder varie selon le système.

Si vous êtes un super utilisateur du système linux, essayez l'une des méthodes suivantes si vous ne connaissez pas la méthode spécifique utilisée par votre configuration Mysql :

  • service mysqld stop
  • /etc/init.d/mysqld stop
  • mysqladmin -u root -p shutdown
  • Certains systèmes ne sont pas configurés pour avoir un moyen élégant d'arrêter mysql (ou pour une raison quelconque, mysql ne répond pas) et vous pouvez forcer la fin de mysql avec l'un ou l'autre :
    • Une étape : pkill -9 mysqld
    • Deux étapes (la moins préférée) :
      • Trouvez l'identifiant du processus de mysql avec soit pgrep mysql o ps aux | grep mysql | grep -v grep
      • En supposant que l'identifiant du processus est 4969 terminer avec kill -9 4969

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.

17 votes

Il est déconseillé d'utiliser kill -9 Il y a plusieurs façons d'essayer avant d'en arriver là.

0 votes

@dot run this in file Root 'find . -name mysqld.sock'. J'ai vu le fichier socket dans d'autres endroits que /var/run. Une fois que vous l'aurez trouvé, vous devrez peut-être modifier votre fichier my.cnf pour indiquer où il se trouve.

0 votes

@ray, j'ai essayé d'exécuter la commande originale d'une manière différente (j'ai trouvé un post spécifique à ubuntu sur un autre site...). Voici les commandes que j'ai exécutées : "sudo service mysql stop" et "sudo mysqld --skip-grant-tables". Après avoir exécuté la deuxième commande, j'obtiens l'erreur suivante : "InnoDB : Unable to lock ./ibdata1, error : 11". Je ne trouve pas ce fichier ./ibdata1... InnoDB : Vérifiez que vous n'avez pas déjà un autre processus mysqld

172voto

Hammad Raza Points 1

Cette erreur se produit en raison d'installations multiples de mysql. Exécutez la commande :

ps -A|grep mysql

Arrêtez le processus en utilisant :

sudo pkill mysql

et ensuite exécuter la commande :

ps -A|grep mysqld

Arrêtez aussi ce processus en l'exécutant :

sudo pkill mysqld

Maintenant que vous êtes prêt, exécutez les commandes suivantes :

service mysql restart
mysql -u root -p

Le mysql fonctionne à nouveau très bien

0 votes

Hé les gars, j'ai parcouru le web pour essayer de réparer ça. Mon problème était que j'essayais de configurer Docker. Je voulais qu'il utilise le répertoire de données de mysql qui était précédemment utilisé par mysql en dehors de docker... cette commande ps était la meilleure !

6 votes

Après avoir parcouru le web pendant plus de 4 heures, cela a finalement fonctionné. Ce devrait être la première réponse :+1 :

4 votes

La tâche pour mysql.service a échoué parce que le processus de contrôle a quitté avec un code d'erreur. Voir "systemctl status mysql.service" et "journalctl -xe" pour plus de détails.

43voto

Ioan Stef Points 131

La solution est bien plus simple.

  1. Tout d'abord, vous devez localiser (dans le Terminal avec "sudo find / -type s") l'endroit où se trouvent vos mysql.sock est situé. Dans mon cas, il se trouvait dans /opt/lampp/var/mysql/mysql.sock
  2. Lancez le terminal et tapez sudo Nautilus
    Cela démarre votre gestionnaire de fichiers avec des privilèges de super utilisateur.
  3. Depuis Nautilus, naviguez jusqu'à l'endroit où se trouve votre mysql.sock est situé
  4. Cliquez à droite sur le fichier et sélectionnez Faire le lien
  5. Renommez le fichier de liaison en mysqld.sock puis cliquez à droite sur le fichier et Coupez il
  6. Aller à /var/run et créez un dossier appelé mysqld et le saisir
  7. Maintenant, faites un clic droit et Pâte le fichier de liaison
  8. Voilà ! Vous aurez maintenant un mysqld.sock à l'adresse /var/run/mysqld/mysqld.sock :)

5 votes

Comment localiser votre fichier mysql.sock ? J'ai essayé find / -name 'mysql.sock' mais ça ne donne rien.

2 votes

@MatthewLock Tout d'abord, assurez-vous que mysql est en cours d'exécution (par "ps aux | grep mysql"), sinon, aucun mysql.sock n'apparaîtra. Ensuite, utilisez "sudo find / -type s", qui vous donne tous les sockets de votre système pour localiser mysql.sock.

1 votes

Rapport : Cela a fonctionné pour moi (bien qu'avec des répertoires différents, puisque j'utilise une distribution différente) : voici ce que j'ai fait : 1- j'ai vérifié à quel endroit mysql essaie d'accéder au fichier socket (en lisant le fichier journal). Pour moi, c'était /usr/var/mysqld/mysqld.sock 2- s'assurer que mysqld est en cours d'exécution (en exécutant /where/your/mysql/is/mssqld_safe ) 3- a cherché l'emplacement où se trouve maintenant le socket mysql (par sudo find / -type s disons juste que c'est en marche /tmp/mysql.sock ) 4- a établi un lien souple de l'endroit où il se trouve à l'endroit où il sera (en sudo ln -s /usr/var/mysql/mysql.sock /tmp/mysql.sock )

12voto

Taimoor Changaiz Points 892

J'ai été confronté à la même erreur et j'ai découvert qu'elle était due à la mise à niveau des paquets, donc après avoir redémarré mon système, j'ai résolu l'erreur.

Je pense que cette erreur est due à la mise à jour des bibliothèques/paquets sql. Essayez donc ceci si vous faites une mise à jour :)

1 votes

J'ai fait cela après la réinstallation (ou la mise à niveau) et maintenant cela fonctionne. Plus de message de socket. Merci !

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