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 mysqlhö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 mysqlfortzufahren 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_packetundwait_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-packetOption 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-networkingOption 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, telnetoder Ping - Funktionen (zB mysql_pingin PHP).
Verwenden Sie tcpdumpdiese 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.cDatei, die für das Auslösen des CR_SERVER_GONE_ERRORFehlers 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;
}