366 Stimmen

FEHLER 2006 (HY000): MySQL-Server hat sich verabschiedet

Ich erhalte diesen Fehler, wenn ich versuche, eine große SQL-Datei (eine große INSERT Abfrage).

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 ***

In der Tabelle wird nichts aktualisiert. Ich habe versucht, die Tabelle/Datenbank zu löschen und rückgängig zu machen sowie MySQL neu zu starten. Keine dieser Maßnahmen 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 ausprobiere...

$ ./mysql -u root -p my_db < file.sql
Enter password: 
ERROR 2006 (HY000) at line 1: MySQL server has gone away

673voto

Kurt Zhong Punkte 7048
max_allowed_packet=64M

Einfügen dieser Zeile in my.cnf Datei löst mein Problem.

Dies ist nützlich, wenn die Spalten große Werte haben, die die Probleme verursachen, finden Sie die Erklärung h .

Unter Windows befindet sich diese Datei unter: " C:\ProgramData\MySQL\MySQL S 5.6"

Unter Linux (Ubuntu): /etc/mysql

193voto

Nanhe Kumar Punkte 14132

Sie können Max Allowed Packet erhöhen

SET GLOBAL max_allowed_packet=1073741824;

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet

78voto

Mario Peshev Punkte 1013

Das globale Update und die my.cnf-Einstellungen haben bei mir aus irgendeinem Grund nicht funktioniert. Die Übergabe der max_allowed_packet Wert direkt an den hier arbeitenden Kunden:

mysql -h <hostname> -u username -p --max_allowed_packet=1073741824 <databasename> < db.sql

43voto

kenorb Punkte 134883

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;
}

27voto

Luke Schoen Punkte 3706

Ich habe den Fehler behoben ERROR 2006 (HY000) at line 97: MySQL server has gone away und migrierte erfolgreich eine >5GB große SQL-Datei, indem ich diese beiden Schritte nacheinander ausführte:

  1. Erstellen Sie /etc/my.cnf, wie von anderen empfohlen, mit dem folgenden Inhalt:

    [mysql]
    connect_timeout = 43200
    max_allowed_packet = 2048M
    net_buffer_length = 512M
    debug-info = TRUE
  2. Anhängen der Flaggen --force --wait --reconnect zum Befehl (d.h. mysql -u root -p -h localhost my_db < file.sql --verbose --force --wait --reconnect ).

Wichtiger Hinweis: Es war notwendig, beide Schritte auszuführen, denn wenn ich mir nicht die Mühe machte, die Änderungen in der Datei /etc/my.cnf vorzunehmen und die Flags hinzuzufügen, fehlten nach dem Import einige der Tabellen.

Verwendetes System: OSX El Capitan 10.11.5; mysql Ver 14.14 Distrib 5.5.51 für osx10.8 (i386)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X