Étant donné que j'ai passé un certain temps à essayer de résoudre cela et que je suis toujours revenu sur cette page pour rechercher cette erreur, je laisserai 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 pourrez peut-être encore 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
Lancement du démon
$ brew services start mariadb
J'ai essayé de se 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 quels my.cnf
fichiers 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érifiez où s'exécute le fichier de socket Unix (presque comme décrit ici ):
$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock
(vous voudrez peut-être au grep mysql
lieu de mariadb)
Ajoutez le fichier de socket que vous avez trouvé ~/.my.cnf
(créez le fichier si nécessaire) (en supposant qu'il ~/.my.cnf
était répertorié lors de l'exécution de la mysql --verbose ...
commande ci-dessus):
[client]
socket = /usr/local/mariadb/data/mariadb.sock
Redémarrez votre mariadb:
$ brew services restart mariadb
Après cela, je pourrais exécuter mysql et obtenir:
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Donc, j'exécute la commande avec les privilèges de superutilisateur à la place et après avoir entré mon mot de passe, j'ai obtenu:
$ sudo mysql -uroot
MariaDB [(none)]>
Remarques:
Je ne suis pas tout à fait sûr des groupes dans lesquels vous devez ajouter le socket, d'abord je l'ai eu [client-serveur] mais ensuite j'ai pensé que [client] devrait suffire. Alors je l'ai changé et ça marche toujours.
En cours d'exécution, mariadb_config | grep socket
j'obtiens:
--socket [/tmp/mysql.sock]
ce qui est un peu déroutant car il semble que ce /usr/local/mariadb/data/mariadb.sock
soit l'endroit réel (du moins sur ma machine)
Je me demande où je peux configurer le /usr/local/mariadb/data/mariadb.sock
pour /tmp/mysql.sock
que je puisse utiliser les paramètres par défaut au lieu d'avoir à modifier mon .my.cnf
(mais je suis trop fatigué maintenant pour comprendre cela ...)
À un moment donné, j'ai également fait des choses mentionnées dans d'autres réponses avant de proposer cela.