Da ich einige Zeit damit verbracht habe, dieses Problem zu lösen, und bei der Suche nach diesem Fehler immer wieder auf diese Seite zurückgekehrt bin, lasse ich meine Lösung hier in der Hoffnung, dass jemand die Zeit spart, die ich verloren habe. Obwohl ich in meinem Fall Mariadb anstelle von MySQL verwende, können Sie diese Lösung möglicherweise trotzdem an Ihre Bedürfnisse anpassen.
Mein Problem
ist das gleiche, aber mein Setup ist etwas anders (Mariadb statt MySQL):
Mariadb mit Homebrew installiert
$ brew install mariadb
Startete den Daemon
$ brew services start mariadb
Versucht, eine Verbindung herzustellen und hat den oben genannten Fehler erhalten
$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Meine Lösung
Finden Sie heraus, von welchen my.cnf
Dateien verwendet wird mysql
(wie in diesem Kommentar vorgeschlagen ):
$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
Überprüfen Sie, wo die Unix-Socket-Datei ausgeführt wird (fast wie hier beschrieben ):
$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock
(Vielleicht möchten Sie grep mysql
statt Mariadb)
Fügen Sie die gefundene Socket-Datei hinzu ~/.my.cnf
(erstellen Sie die Datei bei Bedarf) (vorausgesetzt, sie ~/.my.cnf
wurde beim Ausführen des mysql --verbose ...
Befehls-von oben aufgeführt):
[client]
socket = /usr/local/mariadb/data/mariadb.sock
Starten Sie Ihren Mariadb neu:
$ brew services restart mariadb
Danach konnte ich MySQL ausführen und bekam:
$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Also führe ich den Befehl stattdessen mit Superuser-Berechtigungen aus und nach Eingabe meines Passworts erhielt ich:
$ sudo mysql -uroot
MariaDB [(none)]>
Anmerkungen:
Ich bin mir nicht ganz sicher, in welchen Gruppen Sie den Socket hinzufügen müssen. Zuerst hatte ich ihn [Client-Server], aber dann dachte ich, [Client] sollte ausreichen. Also habe ich es geändert und es funktioniert immer noch.
Beim Laufen mariadb_config | grep socket
bekomme ich:
--socket [/tmp/mysql.sock]
was etwas verwirrend ist, da es den Anschein hat, dass dies /usr/local/mariadb/data/mariadb.sock
der eigentliche Ort ist (zumindest auf meinem Computer)
Ich frage mich, wo ich das konfigurieren kann /usr/local/mariadb/data/mariadb.sock
, /tmp/mysql.sock
damit ich die Standardeinstellungen verwenden kann, anstatt meine bearbeiten zu müssen .my.cnf
(aber ich bin jetzt zu müde, um das herauszufinden ...)
Irgendwann habe ich auch Dinge getan, die in anderen Antworten erwähnt wurden, bevor ich darauf gekommen bin.