Dato che ho passato un bel po 'di tempo a cercare di risolverlo e sono sempre tornato su questa pagina quando cercavo questo errore, lascerò la mia soluzione qui sperando che qualcuno risparmi il tempo che ho perso. Anche se nel mio caso sto utilizzando mariadb anziché MySql, potresti comunque essere in grado di adattare questa soluzione alle tue esigenze.
Il mio problema
è lo stesso, ma la mia configurazione è leggermente diversa (mariadb invece di mysql):
Mariadb installato con homebrew
$ brew install mariadb
Avviato il demone
$ brew services start mariadb
Ho provato a connettermi e ho ricevuto l'errore sopra menzionato
$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
La mia soluzione
scopri quali my.cnf
file sono usati da mysql
(come suggerito in questo commento ):
$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
controlla dove è in esecuzione il file socket Unix (quasi come descritto qui ):
$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock
(potresti volere grep mysql
invece di mariadb)
Aggiungi il file socket che hai trovato ~/.my.cnf
(crea il file se necessario) (supponendo che ~/.my.cnf
fosse elencato durante l'esecuzione del mysql --verbose ...
comando -comando dall'alto):
[client]
socket = /usr/local/mariadb/data/mariadb.sock
Riavvia il tuo mariadb:
$ brew services restart mariadb
Dopo questo potrei eseguire mysql e ottenere:
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Quindi eseguo il comando con i privilegi di superutente e dopo aver inserito la mia password ho ottenuto:
$ sudo mysql -uroot
MariaDB [(none)]>
Appunti:
Non sono abbastanza sicuro dei gruppi in cui devi aggiungere il socket, prima lo avevo [client-server] ma poi ho pensato che [client] dovrebbe essere sufficiente. Quindi l'ho cambiato e funziona ancora.
Durante l'esecuzione mariadb_config | grep socket
ottengo: il
--socket [/tmp/mysql.sock]
che è un po 'confuso poiché sembra che /usr/local/mariadb/data/mariadb.sock
sia il posto effettivo (almeno sulla mia macchina)
Mi chiedo dove posso configurare /usr/local/mariadb/data/mariadb.sock
in /tmp/mysql.sock
modo che sia effettivamente in modo da poter utilizzare le impostazioni predefinite invece di dover modificare il mio .my.cnf
(ma ora sono troppo stanco per capirlo ...)
Ad un certo punto ho anche fatto le cose menzionate in altre risposte prima di arrivare a questo.