Im Allgemeinen ist der Fehler:
Fehler: 2006 ( CR_SERVER_GONE_ERROR
) - Der MySQL-Server ist verschwunden
bedeutet, dass der Client keine Frage an den Server senden konnte .
mysql
importieren
In 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, um mysql
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 anzuwenden mysql
.
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öhenmax_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:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
Sie haben eine Zeitüberschreitung von der TCP / IP-Verbindung auf der Clientseite erhalten.
Lösung: Variable erhöhenwait_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
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
Testen Sie Ihre Verbindung über mysql
, telnet
oder Ping - Funktionen (zB mysql_ping
in PHP).
Verwenden Sie tcpdump
diese Option, um die MySQL-Kommunikation zu überwachen (funktioniert nicht für Socket-Verbindungen), z.
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
Verwenden Sie unter Linux strace
. Verwenden Sie auf BSD / Mac dtrace
/ dtruss
, z
sudo dtruss -a -fn mysqld 2>&1
Siehe: 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 des CR_SERVER_GONE_ERROR
Fehlers für den Clientbefehl verantwortlich ist.
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}