Es kann keine Verbindung zum lokalen MySQL-Server über Socket Homebrew hergestellt werden


109

Ich habe kürzlich versucht, MySQL mit homebrew ( brew install mysql) zu installieren, und wenn ich versuche, es auszuführen, wird der folgende Fehler angezeigt:

FEHLER 2002 (HY000): Es kann keine Verbindung zum lokalen MySQL-Server über den Socket '/tmp/mysql.sock' (2) hergestellt werden.

Es gibt weder /tmp/mysql.socknoch eine /var/lib/mysql.sock.

Ich habe gesucht und keine mysql.sockDatei gefunden.

Wie kann ich das beheben?


Sie können diesen Link sehen GeekHades Antwort. stackoverflow.com/questions/4847069/…
GeekHades

Ich habe MySQL installiert und hatte das gleiche Problem, nachdem mein Laptop-Akku leer war und ein unvollständiges Herunterfahren erzwungen wurde. Es lohnt sich mysqld, die Dinge zu überprüfen und sicherzustellen, dass MySQL beim letzten Mal ordnungsgemäß heruntergefahren wurde. Wenn das Gerät heruntergefahren wurde (z. B. wenn ein Laptop-Akku das Herunterfahren des Systems erzwingt), sollte dies behoben werden. Dann können Sie den MySQL-Server erneut starten : mysql.server start.
Dave Everitt

1
Diese Antwort hat bei mir funktioniert
ArnoHolo

Dies trat bei mir auf, nachdem ich einen neuen Mac Mini aus einem Time Machine-Backup wiederhergestellt hatte. Ich musste mysql@5.7 deinstallieren und neu installieren, damit es funktioniert. Ich habe einen Hammer gebissen, war aber relativ schmerzfrei, da alle meine Konfigurationen beibehalten wurden.
Joshua Pinter

Antworten:


93

Wenn Sie den Server über zum Laufen gebracht haben

mysql.server start

Sie sollten den Socket in /tmp/mysql.sock sehen . Das System scheint dies jedoch in /var/mysql/mysql.sock zu erwarten . Um dies zu beheben, müssen Sie einen Symlink in / var / mysql erstellen :

sudo mkdir /var/mysql

sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Das hat es für mich gelöst. Jetzt arbeitet mein phpMyAdmin glücklich mit localhost und 127.0.0.1 .

Der Kredit geht an Henry


1
Dies löste auch mein Problem, dass Wordpress keine Verbindung zu mySQL herstellen konnte.
Nochmals

20
Wenn ich es versuche, mysql.server startbekomme ich ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid). Ich brauchte eine ältere Version von MySQL, die über installiert wurde brew install mysql@5.6.
Liron Yahdav

3
Laufen. mysql.server start
reparierte

@Liron, haben Sie das Problem behoben, mit dem Sie konfrontiert sind? Ich stehe ohne Hilfe vor dem gleichen Problem.
Buddy

@EB Es ist schon eine Weile her, dass ich dieses Problem hatte, aber wenn Sie auf meinen Kommentar zurückblicken, haben Sie versucht, eine ältere Version von MySQL zu installieren? Ansonsten habe ich leider keine Ideen mehr.
Liron Yahdav

61

Ihr MySQL-Server scheint nicht gestartet zu sein. Normalerweise führe ich den Befehl stop aus und starte ihn dann erneut:

mysqld stop
mysql.server start

Gleicher Fehler, und das funktioniert bei mir.


89
. ERROR! Der Server wurde beendet, ohne die PID-Datei (/usr/local/var/mysql/myHostName.pid) zu aktualisieren. ?
Pesulap

Ich habe mysqld &oben einen Kommentar abgegeben, aber ich denke, es würde wahrscheinlich das Gleiche tun, da mysqld stop ich mir in meinem Fall ziemlich sicher bin, dass dies auf ein unsachgemäßes Herunterfahren zurückzuführen ist.
Mitch VanDuyn

53

Ich hatte einige Verzeichnisse von einer anderen MySQL (8.0) -Installation übrig, die nicht entfernt wurden.

Ich habe dies folgendermaßen gelöst:

Deinstallieren Sie zuerst MySQL

brew uninstall mysql@5.6

Löschen Sie die Ordner / Dateien, die nicht entfernt wurden

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

Installieren Sie mysql neu und verknüpfen Sie es

brew install mysql@5.6
brew link --force mysql@5.6

Aktivieren und starten Sie den Dienst

brew services start mysql@5.6

3
Vielen Dank :) Alle Anweisungen sind fehlgeschlagen, aber Ihre
Vyacheslav Loginov

1
Vielen Dank - diese Antwort endete 24 Stunden Kopf gegen eine Wand schlagen
vladiim

1
Das hat auch bei mir funktioniert, nachdem ich alles andere ausprobiert habe! Danke dir!!!! :)
Eric

1
Das Problem für mich scheint zu sein, dass ich nach einer vorherigen Installation immer noch / usr / local / var / mysql hatte. Entfernen hat den Trick gemacht! Danke für Ihren Vorschlag.
themantimes8

Ich musste den von homebrew erwähnten Schritt "mysql_secure_installation" ausführen, bevor dieser Fehler verschwand.
Searaig

27

Versuchen Sie, eine Verbindung mit "127.0.0.1" anstelle von "localhost" herzustellen.


2
@Esteban MySQL versucht, eine Verbindung zum Unix-Socket herzustellen, wenn Sie ihm mitteilen, dass er eine Verbindung zu "localhost" herstellen soll. Wenn Sie ihm mitteilen, dass eine Verbindung zu 127.0.0.1 hergestellt werden soll, müssen Sie eine Verbindung zum Netzwerk-Socket herstellen. Wahrscheinlich haben Sie MySQL so konfiguriert, dass es nur den Netzwerk-Socket und nicht den Dateisystem-Socket abhört. (Quelle: serverfault.com/a/295300/59101 )
Ardee Aram

Dies hat mir geholfen, den MySQL-Client zur Verwendung des TCP-Sockets zu zwingen, da ich auf localhost einen SSH-Tunnel zu meiner Remote-MySQL-Datenbank ausführe.
Iow

22

1) Wenn Sie sehen können, dass "MySQL gestoppt" ist, wenn Sie den folgenden Befehl ausführen;

brew services list

2) und wenn Sie in der Lage sind, MySQL mit dem folgenden Befehl zu starten;

mysql server start

das heisst; mysql kann manuell gestartet werden, startet jedoch nicht automatisch, wenn das Betriebssystem gestartet wird. Durch Hinzufügen von MySQL zu Diensten wird dieses Problem behoben. Dazu können Sie den folgenden Befehl ausführen.

brew services start mysql

Danach können Sie Ihr Betriebssystem neu starten und versuchen, eine Verbindung zu MySQL herzustellen, um festzustellen, ob es automatisch gestartet wurde. Ich habe das gleiche getan und erhalte keinen Fehler mehr.

FEHLER 2002 (HY000): Es kann keine Verbindung zum lokalen MySQL-Server über den Socket '/tmp/mysql.sock' (2) hergestellt werden.

Ich hoffe das hilft.


@berk es hat in meinem Fall geholfen, den Fehler zu beheben, aber einen weiteren Fehler zu
melden

Hallo @PratikKhadka, der Fehler, den Sie jetzt erhalten, bedeutet, dass MySQL ausgeführt wird und Sie ein Authentifizierungsproblem haben. Gemäß der von Ihnen geposteten Fehlermeldung verwenden Sie den Benutzernamen als "Benutzer" und kein Kennwort. Sie sollten einen gültigen Benutzernamen und ein gültiges Passwort verwenden. Ich empfehle Ihnen, den folgenden Link zu überprüfen; " forums.mysql.com/read.php?34,140320,140324 "
Berk

Kein Neustart des Betriebssystems, nur das Ausführen von "Brew Services Start MySQL" hat bei mir funktioniert. Vielen Dank!
AKS

Hallo @AKS, du hast recht. Ein Neustart ist nicht erforderlich, damit es funktioniert. Ich habe die Antwort bearbeitet, um zu erklären, warum ein Neustart erforderlich ist. Es ist erforderlich zu überprüfen, ob MySQL beim Start des Betriebssystems automatisch gestartet wird. Danke für die Rückmeldung!
Berk

5

Die Datei /tmp/mysql.sockist wahrscheinlich eine Named-Pipe, da sie sich in einem temporären Ordner befindet. Eine Named Pipe ist eine Special-File, die niemals dauerhaft gespeichert wird.

Wenn wir zwei Programme erstellen und möchten, dass ein Programm eine Nachricht an ein anderes Programm sendet, können wir eine Textdatei erstellen. Wir haben ein Programm, das etwas in die Textdatei schreibt, und das andere Programm liest, was unser anderes Programm geschrieben hat. Das ist eine Pipe, außer dass sie die Datei nicht auf unsere Computerfestplatte schreibt und der IE die Datei nicht dauerhaft speichert (wie wir es tun, wenn wir eine Datei erstellen und speichern).

Ein Sockel ist genau das gleiche wie ein Rohr. Der Unterschied besteht darin, dass Sockets normalerweise über ein Netzwerk verwendet werden - zwischen Computern. Ein Socket sendet Informationen an einen anderen Computer oder empfängt Informationen von einem anderen Computer. Sowohl Pipes als auch Sockets verwenden eine temporäre Datei zum Teilen, damit sie "kommunizieren" können.

In diesem Fall ist es schwierig zu erkennen, welche MySQL verwendet wird. Ist aber egal.

Der Befehl mysql.server startsollte den 'Server' (Programm) dazu bringen, seine Endlosschleife auszuführen, die diese spezielle Datei erstellt und auf Änderungen wartet ( listenauf Schreibvorgänge).

Danach kann es häufig vorkommen, dass das MySQL-Programm keine Berechtigung zum Erstellen einer Datei auf Ihrem Computer hat. Daher müssen Sie ihm möglicherweise Root-Berechtigungen erteilen

sudo mysql.server start

Das hat super funktioniert, danke. Ich lief mysql.server start, mysql.server stopund dann wieder den Dienst über Homebrew gestartet mit brew services start mysql@5.7und Dinge verliefen reibungslos.
Taylorthurlow

4

Nach der Installation von macos mojave musste der MySQL-Ordner unter gelöscht /usr/local/var/mysqlund dann über eine brew install mysqlandere Installation neu installiert werden, da sonst berechtigungsbezogene Dinge überall auftauchten.


Ich habe mein Problem mit Ihrer Antwort gelöst, ich hatte zuvor mysql installiert und dann versucht, ein Downgrade auf mysql@5.6
Rodrirokr

Danke Alter. es hat auch mein Problem gelöst. / usr / local / var / mysql zu entfernen und neu zu installieren war eine Lösung für mich.
Oğuz Can Sertel

1
Achtung: Durch das Entfernen /usr/local/var/mysqlwerden auch alle vorhandenen Datenbanken entfernt!
Leonardo

3

Ich habe den gleichen Fehler erhalten und dies hat mir geholfen:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

3

Nur um diese Antworten zu ergänzen: In meinem Fall hatte ich keinen lokalen mySQL-Server, der in einem Docker-Container ausgeführt wurde. Die Socket-Datei existiert also nicht und ist für den "mysql" -Client nicht zugänglich.

Die Sock-Datei wird von mysqld erstellt und mysql verwendet diese, um mit ihr zu kommunizieren. Wenn Ihr mySql-Server jedoch nicht lokal ausgeführt wird, ist die Sock-Datei nicht erforderlich.

Durch Angabe eines Hostnamens / einer IP wird die Sock-Datei nicht benötigt, z

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

3

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.cnfDateien 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 mysqlstatt Mariadb)

Fügen Sie die gefundene Socket-Datei hinzu ~/.my.cnf(erstellen Sie die Datei bei Bedarf) (vorausgesetzt, sie ~/.my.cnfwurde 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:

  1. 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.

  2. Beim Laufen mariadb_config | grep socketbekomme ich: --socket [/tmp/mysql.sock] was etwas verwirrend ist, da es den Anschein hat, dass dies /usr/local/mariadb/data/mariadb.sockder eigentliche Ort ist (zumindest auf meinem Computer)

  3. Ich frage mich, wo ich das konfigurieren kann /usr/local/mariadb/data/mariadb.sock, /tmp/mysql.sockdamit ich die Standardeinstellungen verwenden kann, anstatt meine bearbeiten zu müssen .my.cnf(aber ich bin jetzt zu müde, um das herauszufinden ...)

  4. Irgendwann habe ich auch Dinge getan, die in anderen Antworten erwähnt wurden, bevor ich darauf gekommen bin.


2

Sie müssen ausführen mysql_install_db- der einfachste Weg ist, wenn Sie sich im Installationsverzeichnis befinden:

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

Alternativ können Sie mysql_install_dbeinen basedirParameter wie den folgenden eingeben:

$ mysql_install_db --basedir="$(brew --prefix mysql)"

2

Ich hatte das gleiche Problem auf meinem Mac und löste es, indem ich die folgenden Tutorials befolgte

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

Vergessen Sie jedoch nicht, die alte Version zu beenden oder zu deinstallieren, bevor Sie fortfahren.

Befehle:

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start

1
Bitte erläutern Sie anhand einiger kurzer Beispiele, wie der von Ihnen angegebene Link Ihnen geholfen hat. Links können verschwinden, und dies kann ein Grund dafür sein, dass Ihre Antwort möglicherweise gelöscht wird.
Kurt Van den Branden

2

Nach einem Neustart konnte ich keine Verbindung zum lokalen Mariadb herstellen. Eine Suche brachte mich ebenfalls auf diese Seite und ich wollte meine Lösung mit Ihnen teilen.

Ich habe festgestellt, dass das Verzeichnis my.cnf.d in / usr / local / etc / fehlt.

Dies ist ein bekannter Fehler mit Homebrew, der dort beschrieben und behoben wird. https://github.com/Homebrew/homebrew-core/issues/36801

Schnelle Lösung: mkdir /usr/local/etc/my.cnf.d


Das hat bei mir funktioniert. Konnte nachher keine Verbindung zum lokalen Mariadb herstellen brew updateund neu starten. brew services listDas Ergebnis zeigte den Mariadb-Status startedin Gelb. Danke für den Tipp.
Zwischenzeiten

1

Beim Ausführen von mysql_secure_installation und Eingeben des neuen Kennworts erhielt ich:


Fehler: Es kann keine Verbindung zum lokalen MySQL-Server über den Socket '/tmp/mysql.sock' hergestellt werden (2).


Ich bemerkte, als ich aus dieser Antwort Folgendes versuchte :

netstat -ln | grep mysql

Es hat nichts zurückgegeben, und ich habe das so verstanden, dass es keine .sock-Datei gab.

Daher habe ich meiner Datei my.cnf Folgendes hinzugefügt (entweder in /etc/my.cnf oder in meinem Fall in /usr/local/etc/my.cnf ).

Unter:

[mysqld]
socket=/tmp/mysql.sock

Unter:

[client]
socket=/tmp/mysql.sock

Dies basierte auf diesem Beitrag .

Stoppen / starten Sie dann mysql erneut und wiederholen Sie mysql_secure_installation, wodurch ich schließlich mein neues Root-Passwort eingeben und mit anderen Setup-Einstellungen fortfahren kann.

Ich hoffe das hilft jemandem. Mann, ich hasse dieses Zeug ...


0

nur um diesen Thread zu vervollständigen. Daher wird MAMP (PRO) ziemlich oft verwendet

Der Weg hier ist

/Applications/MAMP/tmp/mysql/mysql.sock

0

Ich habe MySQL manuell im Bereich Systemeinstellungen gestartet, indem ich die Datenbank initialisiert und dann gestartet habe. Dies löste mein Problem.


0

In meinem Fall wurde der Täter in den Protokolldateien gefunden:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

Also habe ich umbenannt ib_logfile0, um den Fehler zu beseitigen (ich musste das gleiche ib_logfile1später tun ).

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb

0

Ich hatte das gleiche Problem. Nachdem ich alle diese Methoden ohne Erfolg ausprobiert hatte, tat ich Folgendes:

tail -f the-mysql-or-maria-db-error-file.err

in einer anderen Konsole:

brew services restart mariadb

Ich habe folgenden Fehler gesehen:

"MAC HOMEBREW Crash-Wiederherstellung fehlgeschlagen. Beheben Sie entweder das Problem (wenn beispielsweise ein Speicherfehler vorliegt) und starten Sie es neu oder löschen Sie das TC-Protokoll und starten Sie mysqld mit"

Also habe ich die tc.logErweiterung auf tc.log.txtMariadb geändert und neu gestartet

brew services restart mariadb

und fertig!



0

Für mich hatte ich vor mariadblanger Zeit installiert, dann installiertmysql@5.7 .

Wenn ich ausgeführt habe mysql -uroot, erhalte ich den Fehler: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Lesen Sie die Antworten:

  • Ich habe deinstalliert mariadb
  • Ordner gelöscht /usr/local/var/mysql
  • Lief den Befehl mysqld --initialize

Dann konnte ich mysql -uroot -p


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.