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 activer les mots de passe... mais chaque fois que j'ai exécuté la commande
# mysqld_safe --skip-grant-tables &
je ne retrouvais jamais l'invite. J'ai essayé de suivre [ces instructions pour récupérer le mot de passe] (http://www.cyberciti.biz/tips/recover-mysql-root-password.html).
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.
Lorsque 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 assez 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
j'obtiens 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 le fichier /var/run/mysqld/mysqld.sock
n'existe pas. Le dossier existe, mais pas le fichier.
De plus, je ne sais pas si cela peut aider ou non, mais j'ai lancé find / -name mysqld
et j'ai obtenu le résultat suivant :
/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder
Je suis nouveau sur Linux et MySQL, donc je ne sais pas si c'est normal ou non. Mais j'inclus ces informations au cas où elles seraient utiles.
J'ai finalement décidé de désinstaller et 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 eu 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 aussi 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
et mysql-client
à nouveau. Mais j'ai remarqué qu'il ne me demande pas de mot de passe. N'est-il pas censé demander le mot de passe de l'administrateur ?
Pour trouver tous les fichiers socket sur votre système, exécutez :
sudo find / -type s
Mon système de serveur Mysql avait un socket ouvert dans /var/lib/mysql/mysql.sock
.
Une fois que vous avez trouvé où le socket est ouvert, ajoutez ou modifiez la ligne dans votre fichier /etc/my.cnf avec le chemin vers le fichier socket :
socket=/var/lib/mysql/mysql.sock
Parfois, le script de démarrage du système qui a lancé l'exécutable en ligne de commande spécifie un drapeau --socket=path
. Cette option peut remplacer l'emplacement du fichier my.cnf, ce qui fait qu'un socket n'est 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 manière de le faire varie selon le système.
Si vous êtes le 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
pkill -9 mysqld
.pgrep mysql
ou `ps aux | grep mysql | grep -v grep``.4969
, terminez avec kill -9 4969
.Après avoir fait cela, vous pouvez rechercher un fichier pid dans /var/run/mysqld/
et le supprimer.
Assurez-vous que les permissions sur votre socket sont telles que l'utilisateur sous lequel mysqld tourne 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 permissions et la propriété de la socket en fonction de vos paramètres de sécurité.
En outre, le répertoire dans lequel réside le socket doit être accessible à l'utilisateur qui exécute le processus mysqld.
La solution est bien plus simple.
mysql.sock
est situé. Dans mon cas, il était dans /opt/lampp/var/mysql/mysql.sock
.sudo Nautilus
mysql.sock
.mysqld.sock
puis faites un clic droit sur le fichier et Coupez./var/run
et créez un dossier appelé mysqld
et entrez le.mysqld.sock
dans /var/run/mysqld/mysqld.sock
:)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 c'est à cause de la mise à jour des bibliothèques sql/paquets que l'erreur s'est produite, alors essayez ceci si vous faites une mise à jour :)