Im Allgemeinen ist der Fehler:
Fehler: 2006 ( CR_SERVER_GONE_ERROR
) - MySQL-Server ist verschwunden
bedeutet, dass der Client konnte keine Frage an den Server senden .
mysql
importieren
In Ihrem speziellen Fall wurde beim Importieren der Datenbankdatei über mysql
bedeutet dies höchstwahrscheinlich, dass einige der Abfragen in der SQL-Datei zu groß für den Import sind und nicht auf dem Server ausgeführt werden konnten, weshalb der Client beim ersten aufgetretenen Fehler fehlschlägt.
Sie haben also die folgenden Möglichkeiten:
-
Option force hinzufügen ( -f
) für mysql
um fortzufahren und den Rest der 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öhung max_allowed_packet
et wait_timeout
in Ihrer Serverkonfiguration (z.B. ~/.my.cnf
).
-
Dump der Datenbank mit --skip-extended-insert
um die großen Abfragen aufzuschlüsseln. Dann importieren Sie sie erneut.
-
Versuchen Sie, die --max-allowed-packet
Option für mysql
.
Häufige Gründe
Im Allgemeinen kann dieser Fehler mehrere Ursachen haben, z. B:
-
eine Anfrage an den Server fehlerhaft oder zu umfangreich ist,
Lösung: Erhöhung max_allowed_packet
variabel .
-
Stellen Sie sicher, dass sich die Variable unter [mysqld]
Abschnitt, nicht [mysql]
.
-
Scheuen Sie sich nicht, große Zahlen für Tests zu verwenden (wie 1G
).
-
Vergessen Sie nicht, den MySQL/MariaDB-Server neu zu starten.
-
Überprüfen Sie, ob der Wert richtig eingestellt wurde:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
-
Sie haben eine Zeitüberschreitung der TCP/IP-Verbindung auf der Client-Seite.
Lösung: Erhöhung wait_timeout
variabel .
-
Sie haben versucht, eine Abfrage auszuführen, nachdem die Verbindung zum Server geschlossen wurde.
Lösung: Ein logischer Fehler in der Anwendung sollte korrigiert werden.
-
Die Suche nach dem Hostnamen ist fehlgeschlagen (z. B. DNS-Serverproblem), oder der Server wurde mit --skip-networking
Option.
Eine andere Möglichkeit ist, dass Ihre Firewall den MySQL-Port blockiert (z.B. 3306 als Standard).
-
Der laufende Thread wurde beendet, also versuchen Sie es erneut.
-
Sie sind auf einen Fehler gestoßen, bei dem der Server während der Ausführung der Abfrage abgestürzt ist.
-
Ein Client, der auf einem anderen Host läuft, verfügt nicht über die erforderlichen Berechtigungen, um eine Verbindung herzustellen.
-
Und vieles mehr, also erfahren Sie mehr unter: B.5.2.9 Der MySQL-Server ist verschwunden .
Fehlersuche
Hier sind einige Ideen zur Fehlersuche auf Expertenebene:
-
Prüfen Sie die Protokolle, z. B.
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
-
Testen Sie Ihre Verbindung über mysql
, telnet
oder Ping-Funktionen (z.B. mysql_ping
in PHP).
-
Verwenden Sie tcpdump
um die MySQL-Kommunikation auszuspähen (funktioniert nicht bei Socket-Verbindungen), z.B.:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
-
Unter Linux verwenden Sie strace
. Unter BSD/Mac verwenden Sie dtrace
/ dtruss
z.B.
sudo dtruss -a -fn mysqld 2>&1
Siehe: Erste Schritte mit DTracing MySQL
Erfahren Sie mehr darüber, wie Sie den MySQL-Server oder -Client debuggen können: 26.5 Fehlersuche und Portierung von MySQL .
Als Referenz finden Sie den Quellcode in sql-common/client.c
Datei, die für das Auslösen der CR_SERVER_GONE_ERROR
Fehler für den Client-Befehl.
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;
}