Beim Versuch, während meiner Testsuite eine Verbindung zu einem lokalen MySQL-Server herzustellen, schlägt der folgende Fehler fehl:
OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")
Ich kann jedoch jederzeit eine Verbindung zu MySQL herstellen, indem ich das Befehlszeilenprogramm
mysql
ausführe. A ps aux | grep mysql
zeigt an, dass der Server ausgeführt wird, und
stat /tmp/mysql.sock
bestätigt, dass der Socket vorhanden ist. Wenn ich einen Debugger in der except
Klausel dieser Ausnahme öffne , kann ich außerdem zuverlässig eine Verbindung mit genau denselben Parametern herstellen.
Dieses Problem wird ziemlich zuverlässig reproduziert, scheint jedoch nicht 100% zu sein, da meine Testsuite bei jedem blauen Mond tatsächlich ausgeführt wird, ohne diesen Fehler zu treffen. Als ich versuchte damit zu laufen, wurde sudo dtruss
es nicht reproduziert.
Der gesamte Client-Code ist in Python, obwohl ich nicht herausfinden kann, wie relevant das wäre.
Das Wechseln zur Verwendung des Hosts 127.0.0.1
führt zu folgendem Fehler:
DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)
max_connections
Sie vielleicht, Ihre MySQL-Conf-Datei zu vergrößern?mysql -h 127.0.0.1
über die Kommandozeile? Ich bin mir nicht sicher, ob Ihr MySQL-Server tatsächlich einen TCP-Port überwacht.mysql -h localhost
zuverlässig?Antworten:
Das hat bei mir funktioniert. Wenn dies jedoch nicht funktioniert, stellen Sie sicher, dass mysqld ausgeführt wird, und versuchen Sie, eine Verbindung herzustellen.
quelle
Der entsprechende Abschnitt des MySQL-Handbuchs ist hier . Ich würde zunächst die dort aufgeführten Debugging-Schritte durchgehen.
Denken Sie auch daran, dass localhost und 127.0.0.1 in diesem Zusammenhang nicht dasselbe sind:
localhost
, wird ein Socket oder eine Pipe verwendet.127.0.0.1
muss der Client TCP / IP verwenden.So können Sie beispielsweise überprüfen, ob Ihre Datenbank auf TCP-Verbindungen wartet vi
netstat -nlp
. Es ist wahrscheinlich, dass es auf TCP-Verbindungen wartet, weil Sie sagen, dass das gutmysql -h 127.0.0.1
funktioniert. Verwenden Sie, um zu überprüfen, ob Sie über Sockets eine Verbindung zu Ihrer Datenbank herstellen könnenmysql -h localhost
.Wenn nichts davon hilft, müssen Sie wahrscheinlich weitere Details zu Ihrer MySQL-Konfiguration veröffentlichen, genau wie Sie die Verbindung instanziieren usw.
quelle
localhost
als Host) , wurde dieser Fehler angezeigt . Ändern, um127.0.0.1
es zu beheben.Für mich war das Problem, dass ich keinen MySQL-Server laufen ließ. Führen Sie zuerst den Server aus und führen Sie ihn dann aus
mysql
.quelle
Ich habe dies in meinem Shop gesehen, als meine Entwickler einen Stack-Manager wie MAMP installiert haben, der mit MySQL an einem nicht standardmäßigen Ort vorkonfiguriert ist.
an Ihrem Terminal laufen
das gibt dir deinen Pfad zur Sockendatei. Nehmen Sie diesen Pfad und verwenden Sie ihn in Ihrem DATABASES HOST-Parameter.
Was Sie tun müssen, ist zeigen Sie Ihre
HINWEIS
which mysql_config
Wird auch ausgeführt, wenn auf dem Computer mehrere Instanzen des MySQL-Servers installiert sind, stellen Sie möglicherweise eine Verbindung zum falschen Server her.quelle
Ich habe gerade das
HOST
vonlocalhost
auf geändert127.0.0.1
und es funktioniert gut:quelle
settings.py
des Projekts.Wenn Sie Ihren Daemon mysql unter Mac OSx verlieren, aber in einem anderen Pfad vorhanden sind, z. B. in private / var, führen Sie den folgenden Befehl aus
1)
2) Starten Sie Ihre Verbindung zu MySQL neu mit:
funktioniert auch für Mariadb
quelle
Führen Sie das folgende cmd im Terminal aus
Starten Sie dann die Maschine neu, damit sie wirksam wird. Es klappt!!
quelle
Überprüfen Sie die Anzahl der geöffneten Dateien für den MySQL-Prozess mit dem Befehl lsof.
Erhöhen Sie das Limit für geöffnete Dateien und führen Sie es erneut aus.
quelle
ulimit
die Anzahl der geöffneten Dateien erhöhen, die Ihr Client und Server geöffnet haben dürfen. Wenn Sie eine neuere Version von Ubuntu verwenden, müssen Sie möglicherweise das MySQL-Upstart-Skript in / etc / init bearbeiten. Hoffentlich können Sie dies jedoch einfach in der .cnf-Datei tun.Nachdem ich einige dieser Lösungen ausprobiert hatte und keinen Erfolg hatte, funktionierte dies für mich:
quelle
Dies kann eines der folgenden Probleme sein.
und geben Sie es dann in Ihren Datenbankverbindungscode ein:
/tmp/mysql.sock ist die von grep zurückgegebene
2. Falsche MySQL-Port-Lösung: Sie müssen den richtigen MySQL-Port herausfinden:
und dann in Ihrem Code:
3306 ist der vom grep zurückgegebene Port
Ich denke, die erste Option wird Ihr Problem lösen.
quelle
Für diejenigen, die ein Upgrade von 5.7 auf 8.0 über Homebrew durchgeführt haben, ist dieser Fehler wahrscheinlich darauf zurückzuführen, dass das Upgrade nicht abgeschlossen ist. In meinem Fall
mysql.server start
habe ich folgenden Fehler erhalten:Ich habe dann die Protokolldatei über überprüft
cat /usr/local/var/mysql/YOURS.err | tail -n 50
und Folgendes festgestellt:Wenn Sie sich auf demselben Boot befinden, installieren Sie zuerst
[email protected]
über Homebrew, stoppen Sie den Server und starten Sie das 8.0-System erneut.Dann,
Dadurch würde MySQL (8.0) wieder funktionieren.
quelle
ERROR! The server quit without updating PID file
wieder.Ich glaube, ich habe das gleiche Verhalten vor einiger Zeit gesehen, kann mich aber nicht an die Details erinnern.
In unserem Fall war das Problem der Moment, in dem der Testrunner Datenbankverbindungen in Bezug auf die erste Datenbankinteraktion initialisiert, die beispielsweise durch den Import eines Moduls in settings.py oder eines __init__.py erforderlich ist. Ich werde versuchen, weitere Informationen zu finden, aber dies könnte bereits eine Glocke für Ihren Fall läuten.
quelle
Stellen Sie sicher, dass Ihre / etc / hosts enthalten ist
127.0.0.1 localhost
und es sollte gut funktionierenquelle
Ich habe zwei hinterhältige Vermutungen zu dieser
KONJEKTUR 1
Prüfen Sie die Möglichkeit, nicht auf die
/tmp/mysql.sock
Datei zugreifen zu können . Wenn ich MySQL-Datenbanken einrichte, lasse ich normalerweise die Socket-Dateisite ein/var/lib/mysql
. Wenn Sie sich bei mysql als anmeldenroot@localhost
, benötigt Ihre Betriebssystemsitzung Zugriff auf den/tmp
Ordner. Stellen Sie sicher, dass/tmp
das Betriebssystem über die richtigen Zugriffsrechte verfügt. Stellen Sie außerdem sicher, dass der Sudo-Benutzer die Datei immer einlesen kann/tmp
.KONJEKTUR 2
Der Zugriff auf MySQL über
127.0.0.1
kann zu Verwirrung führen, wenn Sie nicht aufpassen. Wie?Wenn Sie über die Befehlszeile eine Verbindung zu MySQL herstellen
127.0.0.1
, müssen Sie möglicherweise das TCP / IP-Protokoll angeben.oder versuchen Sie den DNS-Namen
Dadurch wird die Anmeldung als umgangen
root@localhost
, aber stellen Sie sicher, dass Sie habenroot@'127.0.0.1'
definiert haben.Wenn Sie das nächste Mal eine Verbindung zu MySQL herstellen, führen Sie Folgendes aus:
Was gibt dir das?
Wenn diese Funktionen mit denselben Werten zurückgegeben werden, stellen Sie wie erwartet eine Verbindung her und authentifizieren sich. Wenn die Werte unterschiedlich sind, müssen Sie möglicherweise den entsprechenden Benutzer erstellen
[email protected]
.quelle
Hatte das gleiche Problem. Es stellte sich heraus, dass
mysqld
es nicht mehr lief (ich bin unter Mac OSX). Ich habe es neu gestartet und der Fehler ist verschwunden.Ich habe herausgefunden, dass
mysqld
dies aufgrund dieses Links nicht funktioniert : http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.htmlBeachten Sie den ersten Tipp!
quelle
Wenn Sie eine Fehlermeldung wie unten erhalten:
Suchen Sie dann einfach Ihren mysqld.sock-Speicherort und fügen Sie ihn zu "HOST" hinzu.
Als ob ich xampp unter Linux benutze, befindet sich meine
mysqld.sock
Datei an einem anderen Ort. es funktioniert also nicht für '/var/run/mysqld/mysqld.sock
'quelle
Stellen Sie sicher, dass Ihre MySQL nicht die maximale Anzahl von Verbindungen erreicht hat oder sich nicht in einer Bootschleife befindet, wie dies häufig der Fall ist, wenn die Einstellungen in my.cnf falsch sind.
Verwenden Sie ps aux | grep mysql, um zu überprüfen, ob sich die PID ändert.
quelle
Ich habe mich zu lange online umgesehen, um keinen Beitrag zu leisten. Nachdem ich versucht hatte, die MySQL-Eingabeaufforderung über die Befehlszeile einzugeben, erhielt ich weiterhin die folgende Nachricht:
FEHLER 2002 (HY000): Es kann keine Verbindung zum lokalen MySQL-Server über den Socket '/tmp/mysql.sock' (2) hergestellt werden.
Dies lag daran, dass mein lokaler MySQL-Server nicht mehr lief. Um den Server neu zu starten, habe ich zu navigiert
wo sich mein mysql.server befand. Von hier aus geben Sie einfach Folgendes ein:
Dadurch wird der lokale MySQL-Server neu gestartet.
Von dort aus können Sie das Root-Passwort bei Bedarf zurücksetzen.
quelle
Ich musste alle Instanzen von MySQL beenden, indem ich zuerst alle Prozess-IDs fand:
Und sie dann umzubringen:
Dann:
Hat für mich gearbeitet.
quelle
Der Socket befindet sich in / tmp. Unter Unix-Systemen kann dies aufgrund von Modi und Besitzverhältnissen auf / tmp zu Problemen führen. Aber solange Sie uns sagen, dass Sie Ihre MySQL-Verbindung normal verwenden können, ist dies auf Ihrem System wahrscheinlich kein Problem. Eine primäre Überprüfung sollte darin bestehen, mysql.sock in ein neutraleres Verzeichnis zu verschieben.
Die Tatsache, dass das Problem "zufällig" auftritt (oder nicht jedes Mal), lässt mich denken, dass es sich um ein Serverproblem handeln könnte.
Befindet sich Ihr / tmp auf einer Standardfestplatte oder auf einem exotischen Mount (wie im RAM)?
Ist dein / tmp leer?
Zeigt
iotop
Ihnen etwas nicht, wenn Sie auf das Problem stoßen?quelle
Konfigurieren Sie Ihre DB-Verbindung im Dialogfeld "DB-Verbindungen verwalten". Wählen Sie als Verbindungsmethode 'Standard (TCP / IP)'.
Weitere Informationen finden Sie auf dieser Seite unter http://dev.mysql.com/doc/workbench/en/wb-manage-db-connections.html
Laut dieser anderen Seite wird eine Socket-Datei verwendet, auch wenn Sie localhost angeben.
Außerdem wird gezeigt, wie Sie Ihren Server überprüfen, indem Sie die folgenden Befehle ausführen:
quelle
In Ubuntu14.04 können Sie dies tun, um dieses Problem zu beheben.
quelle
Ich bin mir sicher, dass mysqld gestartet ist und die Befehlszeile mysql ordnungsgemäß funktionieren kann. Aber der httpd-Server zeigt das Problem (kann keine Verbindung zu MySQL über Socket herstellen).
Ich habe den Dienst mit mysqld_safe & gestartet.
Schließlich stellte ich fest, dass beim Starten des mysqld-Dienstes mit service mysqld start Probleme auftreten (Problem mit der Selinux-Berechtigung). Wenn ich das Selinux-Problem behebe und mysqld mit "service mysqld start" starte, verschwindet das httpd-Verbindungsproblem. Aber wenn ich mysqld mit mysqld_safe & starte, kann mysqld bearbeitet werden. (MySQL-Client kann richtig funktionieren). Es gibt jedoch immer noch Probleme bei der Verbindung mit httpd.
quelle
Wenn es sich um einen Socket handelt, lesen Sie diese Datei
und sehen Sie, wo sich die Standardsteckdose befindet. Es ist eine Zeile wie:
Erstellen Sie nun einen Alias für Ihre Shell wie folgt:
Auf diese Weise benötigen Sie keine Root-Rechte.
quelle
Versuche einfach zu rennen
mysqld
.Dies war, was für mich auf dem Mac nicht funktionierte. Wenn es nicht funktioniert, gehen Sie zu
/usr/local/var/mysql/<your_name>.err
, um detaillierte Fehlerprotokolle anzuzeigen.quelle
Kann hilfreich sein.
quelle
Verwenden von MacOS Mojave 10.14.6 für MySQL 8.0.19, installiert über Homebrew
sudo find / -name my.cnf
/usr/local/etc/my.cnf
Arbeitete eine Zeit lang, dann kehrte schließlich der Fehler zurück. Deinstallierte die Homebrew-Version von MySQL und installierte die .dmg-Datei direkt von hier aus
Glücklich verbunden seitdem.
quelle
In meinem Fall hat es geholfen, die Datei zu bearbeiten
/etc/mysql/mysql.conf.d/mysqld.cnf
und die Zeile zu ersetzen:mit
Dann habe ich den Server neu gestartet und es hat gut funktioniert. Das Lustige ist, dass es immer noch funktioniert hat, wenn ich die Leitung wie zuvor zurückgesetzt und neu gestartet habe.
quelle
Ich hatte kürzlich ein ähnliches Problem. Ging durch viele Antworten. Ich habe es durch folgende Schritte zum Laufen gebracht.
quelle
Für mich lief der MySQL-Server nicht. Also habe ich den MySQL-Server durch gestartet
dann
mysql_secure_installation
um den Server zu sichern und jetzt kann ich den MySQL Server durch besuchen
sudo mysql -uroot -p
quelle