Comme j'ai passé pas mal de temps à essayer de résoudre ce problème et que je suis toujours revenu à cette page en cherchant cette erreur, je vais laisser ma solution ici en espérant que quelqu'un économise le temps que j'ai perdu. Bien que dans mon cas j'utilise mariadb plutôt que MySql, vous pouvez peut-être adapter cette solution à vos besoins.
Mon problème
est le même, mais ma configuration est un peu différente (mariadb au lieu de mysql) :
Installé mariadb avec homebrew
$ brew install mariadb
Démarrage du démon
$ brew services start mariadb
J'ai essayé de me connecter et j'ai obtenu l'erreur mentionnée ci-dessus.
$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Ma solution
Découvrez les my.cnf
sont utilisés par mysql
(comme suggéré dans ce commentaire ) :
$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
vérifier où le fichier socket Unix est exécuté (presque comme décrit aquí ) :
$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock
(vous pourriez vouloir grep mysql
au lieu de mariadb)
Ajoutez le fichier socket que vous avez trouvé à ~/.my.cnf
(créer le fichier si nécessaire)(en supposant que ~/.my.cnf
a été listé lors de l'exécution de la mysql --verbose ...
de la commande ci-dessus) :
[client]
socket = /usr/local/mariadb/data/mariadb.sock
Redémarrez votre mariadb :
$ brew services restart mariadb
Après cela, j'ai pu lancer mysql et j'ai obtenu :
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
J'ai donc exécuté la commande avec les privilèges de superutilisateur et après avoir entré mon mot de passe, j'ai obtenu :
$ sudo mysql -uroot
MariaDB [(none)]>
Notes :
-
Je ne suis pas tout à fait sûr des groupes dans lesquels il faut ajouter le socket, au début je l'avais [client-serveur] mais ensuite je me suis dit que [client] devrait suffire. Je l'ai donc modifié et ça fonctionne toujours.
-
En cours d'exécution mariadb_config | grep socket
J'ai compris : --socket [/tmp/mysql.sock]
ce qui est un peu déroutant puisqu'il semble que /usr/local/mariadb/data/mariadb.sock
est l'endroit actuel (au moins sur ma machine)
-
Je me demande où je peux configurer le /usr/local/mariadb/data/mariadb.sock
pour être réellement /tmp/mysql.sock
afin que je puisse utiliser les paramètres par défaut au lieu d'avoir à modifier mes .my.cnf
(mais je suis trop fatigué maintenant pour le découvrir...)
-
À un moment donné, j'ai aussi fait des choses mentionnées dans d'autres réponses avant de trouver cette solution.
0 votes
Vous pouvez voir ce lien Réponse de GeekHades. stackoverflow.com/questions/4847069/
0 votes
J'ai installé mysql récemment et j'ai eu le même problème après que la batterie de mon ordinateur portable soit morte et ait forcé un arrêt incomplet. Cela vaut la peine de lancer
mysqld
pour vérifier les choses et s'assurer que MySQL s'est arrêté correctement la dernière fois. S'il y a eu un arrêt "sale" (par exemple, si une batterie d'ordinateur portable force l'arrêt du système), cela devrait le nettoyer. Vous pouvez alors relancer le serveur MySQL :mysql.server start
.1 votes
Cette réponse a fonctionné pour moi : stackoverflow.com/a/6378429/2641861
0 votes
Cela m'est arrivé après avoir restauré un nouveau Mac Mini à partir d'une sauvegarde Time Machine. J'ai dû désinstaller mysql@5.7 et le réinstaller pour qu'il commence à fonctionner. C'est un peu un marteau mais c'était relativement indolore puisque toutes mes configurations étaient conservées.