Ich erhalte diesen Fehler, wenn ich versuche, eine große SQL-Datei (eine große INSERT
Abfrage) zu erstellen .
mysql> source file.sql
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 2
Current database: *** NONE ***
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 3
Current database: *** NONE ***
Nichts in der Tabelle wird aktualisiert. Ich habe versucht, die Tabelle / Datenbank zu löschen und wieder zu löschen sowie MySQL neu zu starten. Keines dieser Dinge löst das Problem.
Hier ist meine maximale Paketgröße:
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
Hier ist die Dateigröße:
$ ls -s file.sql
79512 file.sql
Wenn ich die andere Methode versuche ...
$ ./mysql -u root -p my_db < file.sql
Enter password:
ERROR 2006 (HY000) at line 1: MySQL server has gone away
Antworten:
Das Hinzufügen dieser Zeile zur
my.cnf
Datei löst mein Problem.Dies ist nützlich, wenn die Spalten große Werte haben, die die Probleme verursachen. Die Erklärung finden Sie hier .
quelle
set global max_allowed_packet=64*1024*1024;
- erfordert auch keinen MySQL-Neustartsudo service mysql restart
damit die Änderungen an der Datei my.cnf wirksam werden.Sie können das maximal zulässige Paket erhöhen
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet
quelle
Das globale Update und die my.cnf-Einstellungen haben aus irgendeinem Grund bei mir nicht funktioniert. Die Übergabe des
max_allowed_packet
Wertes direkt an den Kunden hat hier funktioniert:quelle
--max_allowed_packet
einzigen Auswirkungen auf den Client zu verwenden. Ändern Sie auch den MySQL-Server (MySQL), indem Siemax_allowed_packet
die/etc/my.cnf
Datei bearbeiten und den MySQL-Server neu starten.Im Allgemeinen ist der Fehler:
bedeutet, dass der Client keine Frage an den Server senden konnte .
mysql
importierenIn Ihrem speziellen Fall bedeutet dies beim Importieren der Datenbankdatei über
mysql
höchstwahrscheinlich, dass einige der Abfragen in der SQL-Datei zu groß zum Importieren sind und nicht auf dem Server ausgeführt werden können. Daher schlägt der Client beim ersten aufgetretenen Fehler fehl.Sie haben also folgende Möglichkeiten:
Option Force hinzufügen (
-f
) hinzu, ummysql
fortzufahren und die restlichen Abfragen auszuführen.Dies ist nützlich, wenn die Datenbank einige große Abfragen im Zusammenhang mit dem Cache enthält, die ohnehin nicht relevant sind.
Erhöhen Sie
max_allowed_packet
undwait_timeout
in Ihrer Serverkonfiguration (z~/.my.cnf
).Speichern Sie die Datenbank mit
--skip-extended-insert
Option, um die großen Abfragen aufzuschlüsseln. Dann importieren Sie es erneut.Versuchen Sie, die
--max-allowed-packet
Option für anzuwendenmysql
.Häufige Gründe
Im Allgemeinen kann dieser Fehler verschiedene Dinge bedeuten, wie zum Beispiel:
Eine Abfrage an den Server ist falsch oder zu groß.
Lösung: Variable erhöhen
max_allowed_packet
.Stellen Sie sicher, dass sich die Variable unter
[mysqld]
Abschnitt befindet, nicht[mysql]
.Haben Sie keine Angst, große Zahlen zum Testen zu verwenden (wie
1G
).Vergessen Sie nicht, den MySQL / MariaDB-Server neu zu starten.
Überprüfen Sie, ob der Wert richtig eingestellt wurde durch:
Sie haben eine Zeitüberschreitung von der TCP / IP-Verbindung auf der Clientseite erhalten.
Lösung: Variable erhöhen
wait_timeout
.Sie haben versucht, eine Abfrage auszuführen, nachdem die Verbindung zum Server geschlossen wurde.
Lösung: Ein logischer Fehler in der Anwendung sollte behoben werden.
Die Suche nach Hostnamen ist fehlgeschlagen (z. B. DNS-Serverproblem) oder der Server wurde mit der
--skip-networking
Option gestartet .Eine andere Möglichkeit besteht darin, dass Ihre Firewall den MySQL-Port blockiert (z. B. standardmäßig 3306).
Der laufende Thread wurde beendet. Versuchen Sie es erneut.
Sie haben einen Fehler festgestellt, bei dem der Server während der Ausführung der Abfrage gestorben ist.
Ein Client, der auf einem anderen Host ausgeführt wird, verfügt nicht über die erforderlichen Berechtigungen zum Herstellen einer Verbindung.
Weitere Informationen finden Sie unter : B.5.2.9 Der MySQL-Server ist verschwunden .
Debuggen
Hier sind einige Debug-Ideen auf Expertenebene:
Überprüfen Sie die Protokolle, z
Testen Sie Ihre Verbindung über
mysql
,telnet
oder Ping - Funktionen (zBmysql_ping
in PHP).Verwenden Sie
tcpdump
diese Option, um die MySQL-Kommunikation zu überwachen (funktioniert nicht für Socket-Verbindungen), z.Verwenden Sie unter Linux
strace
. Verwenden Sie auf BSD / Macdtrace
/dtruss
, zSiehe: Erste Schritte mit DTracing MySQL
Weitere Informationen zum Debuggen von MySQL-Servern oder -Clients finden Sie unter: 26.5 Debuggen und Portieren von MySQL .
Überprüfen Sie als Referenz den Quellcode in der
sql-common/client.c
Datei, die für das Auslösen desCR_SERVER_GONE_ERROR
Fehlers für den Clientbefehl verantwortlich ist.quelle
Nur für den Fall, um Variablen zu überprüfen, die Sie verwenden können
Dadurch werden die aktuellen Variablen angezeigt, in diesem Fall max_allowed_packet, und wie in einer anderen Antwort angegeben, können Sie sie vorübergehend festlegen
In meinem Fall wurde die cnf-Datei nicht berücksichtigt und ich weiß nicht warum, daher hat der SET GLOBAL-Code wirklich geholfen.
quelle
Ich habe den Fehler behoben
ERROR 2006 (HY000) at line 97: MySQL server has gone away
und eine SQL-Datei mit> 5 GB erfolgreich migriert, indem ich die beiden folgenden Schritte ausgeführt habe:Erstellt /etc/my.cnf wie von anderen empfohlen, mit folgenden Inhalten:
Anhängen der Flags
--force --wait --reconnect
an den Befehl (dhmysql -u root -p -h localhost my_db < file.sql --verbose --force --wait --reconnect
).Wichtiger Hinweis: Es war notwendig, beide Schritte auszuführen, da einige der Tabellen nach dem Import fehlten, wenn ich nicht die Änderungen an der Datei /etc/my.cnf vorgenommen und diese Flags angehängt habe.
Verwendetes System: OSX El Capitan 10.11.5; mysql Ver 14.14 Distrib 5.5.51 für osx10.8 (i386)
quelle
my.cnf
Ihren MySQL-Dienst neu starten.Ich hatte das gleiche Problem, aber das Ändern von max_allowed_packet in der Datei my.ini / my.cnf unter [mysqld] machte den Trick.
füge eine Zeile hinzu
Starten Sie jetzt den MySQL-Dienst neu, sobald Sie fertig sind.
quelle
Sie können sich auch als root (oder SUPER-Berechtigung) bei der Datenbank anmelden und dies tun
erfordert auch keinen MySQL-Neustart. Beachten Sie, dass Sie Ihre
my.cnf
Datei wie in anderen Lösungen beschrieben reparieren sollten :Und bestätigen Sie die Änderung nach dem Neustart von MySQL:
Sie können auch die Befehlszeile verwenden, dies erfordert jedoch möglicherweise die Aktualisierung der Start / Stopp-Skripte, die Systemaktualisierungen und Patches möglicherweise nicht überleben.
Wie gewünscht, füge ich hier meine eigene Antwort hinzu. Schön zu sehen, dass es funktioniert!
quelle
Die Lösung besteht darin, die Werte
wait_timeout
undconnect_timeout
Parameter in Ihrer Optionsdatei unter dem[mysqld]
Tag zu erhöhen .Ich musste ein 400-MB-MySQL-Backup wiederherstellen, und das hat bei mir funktioniert (die Werte, die ich unten verwendet habe, sind etwas übertrieben, aber Sie verstehen, worum es geht):
quelle
Hier könnten ein paar Dinge passieren;
INSERT
läuft lange und der Client trennt die Verbindung. Wenn die Verbindung wiederhergestellt wird, wird keine Datenbank ausgewählt, daher der Fehler. Eine Möglichkeit besteht darin, Ihre Batchdatei über die Befehlszeile auszuführen und die Datenbank in den Argumenten wie folgt auszuwählen.php
oder eine andere Sprache auszuführen . Nach jeder lang laufenden Anweisung können Sie die Verbindung schließen und erneut öffnen, um sicherzustellen, dass Sie zu Beginn jeder Abfrage verbunden sind.quelle
source
BefehlWenn Sie auf einem Mac sind und MySQL über Brew wie ich installiert haben, hat Folgendes funktioniert.
cp $(brew --prefix mysql)/support-files/my-default.cnf /usr/local/etc/my.cnf
Quelle: Wo ist my.cnf für Homebrew-MySQL-Installationen?
hinzufügen
max_allowed_packet=1073741824
zu/usr/local/etc/my.cnf
mysql.server restart
quelle
Ich habe diesen Fehler festgestellt, wenn ich MySQL-Cluster verwende. Ich weiß nicht, ob diese Frage von einer Cluster-Verwendung stammt oder nicht. Da der Fehler genau der gleiche ist, geben Sie hier meine Lösung an. Dieser Fehler wird angezeigt, weil die Datenknoten plötzlich abstürzen. Wenn die Knoten jedoch abstürzen, können Sie mit cmd immer noch das richtige Ergebnis erzielen:
Und das mysqld funktioniert auch richtig. Also kann ich zunächst nicht verstehen, was falsch ist. Und ungefähr 5 Minuten später zeigt das Ergebnis ndb_mgm, dass kein Datenknoten funktioniert. Dann erkenne ich das Problem. Versuchen Sie also, alle Datenknoten neu zu starten. Dann ist der MySQL-Server wieder verfügbar und alles ist in Ordnung.
Aber eines ist seltsam für mich, nachdem ich den MySQL-Server für einige Abfragen verloren habe, wenn ich cmd like verwende
show tables
immer noch die Rückgabeinformationen wie erhalten33 rows in set (5.57 sec)
, aber es werden keine Tabelleninformationen angezeigt.quelle
Für Amazon RDS (es ist mein Fall) können Sie den
max_allowed_packet
Parameterwert in einen beliebigen numerischen Wert in Byte ändern, der für die größten Daten in einer beliebigen Einfügung sinnvoll ist (z. B.: Wenn Ihre Einfügung einige 50-MB-Blob-Werte enthält, legen Sie den Wert festmax_allowed_packet
bis 64M = 67108864), in einem neuen oder vorhandenenparameter-group
. Wenden Sie diese Parametergruppe dann auf Ihre MySQL-Instanz an (möglicherweise muss die Instanz neu gestartet werden).quelle
max_allowed_packet parameter
und stellen Sie sie auf die entsprechende Größe ein (oder wenn Sie wirklich große Blobs haben, setzen Sie sie einfach auf den Maximalwert 1073741824 ) es sollte funktionieren.Wenn die Verbindung wiederhergestellt wird und die Verbindungs-ID 2 abgerufen wird, ist der Server fast definitiv gerade abgestürzt.
Wenden Sie sich an den Serveradministrator, um das Problem zu diagnostizieren. Kein nicht böswilliges SQL sollte den Server zum Absturz bringen, und die Ausgabe von mysqldump sollte es sicherlich nicht.
Es ist wahrscheinlich der Fall, dass der Serveradministrator einen großen Betriebsfehler gemacht hat, z. B. das Zuweisen von Puffergrößen, die größer als die Adressraumgrenzen der Architektur oder größer als die Kapazität des virtuellen Speichers sind. Das MySQL-Fehlerprotokoll enthält wahrscheinlich einige relevante Informationen. Sie werden dies überwachen, wenn sie trotzdem kompetent sind.
quelle
Dies ist eher ein seltenes Problem, aber ich habe dies gesehen, wenn jemand das gesamte Verzeichnis / var / lib / mysql kopiert hat, um seine Datenbank auf einen anderen Server zu migrieren. Der Grund, warum es nicht funktioniert, ist, dass die Datenbank ausgeführt wurde und Protokolldateien verwendet. Es funktioniert manchmal nicht, wenn sich Protokolle in / var / log / mysql befinden. Die Lösung besteht darin, auch die Dateien / var / log / mysql zu kopieren.
quelle
Für Drupal 8-Benutzer, die nach einer Lösung für einen DB-Importfehler suchen:
Am Ende der SQL-Dump-Datei können Befehle zum Einfügen von Daten in die Tabelle "webprofiler" stehen. Das ist wohl eine Debug-Protokolldatei, die für die Site nicht wirklich wichtig ist, damit all dies entfernt werden kann. Ich habe alle diese Einfügungen gelöscht, einschließlich LOCK TABLES und UNLOCK TABLES (und alles dazwischen). Es befindet sich ganz unten in der SQL-Datei. Das Problem wird hier beschrieben:
https://www.drupal.org/project/devel/issues/2723437
Aber es gibt keine Lösung dafür, außer diese Tabelle abzuschneiden.
Übrigens habe ich alle Lösungen aus den obigen Antworten ausprobiert und nichts anderes hat geholfen.
quelle
Ich habe alle oben genannten Lösungen ausprobiert, alle sind fehlgeschlagen.
Am Ende habe ich
-h 127.0.0.1
statt Standard verwendetvar/run/mysqld/mysqld.sock
.quelle
Diese Fehlermeldung tritt auch auf, wenn Sie das SCHEMA mit einer anderen COLLATION als der im Dump verwendeten erstellt haben. Also, wenn der Dump enthält
Sie sollten dies auch in der SCHEMA-Zusammenstellung berücksichtigen:
Ich hatte utf8mb4_general_ci im Schema verwendet, weil mein Skript aus einer neuen V8-Installation stammte. Jetzt lud das Laden einer Datenbank auf altem 5.7 ab und machte mich fast verrückt.
Vielleicht hilft dir das, ein paar frustierende Stunden zu sparen ... :-)
(MacOS 10.3, MySQL 5.7)
quelle
Wenn keine dieser Antworten das Problem löst, habe ich es gelöst, indem ich die Tabellen entfernt und sie auf diese Weise automatisch neu erstellt habe:
Verwenden Sie dieses Backup dann einfach mit Ihrer Datenbank und es werden die benötigten Tabellen entfernt und neu erstellt.
Dann sichern Sie nur Daten und machen dasselbe, und es wird funktionieren.
quelle
Wie wäre es mit dem MySQL-Client wie folgt:
quelle