"MySQL-Server ist verschwunden" beim Versuch, eine große Dump-Datei zu importieren

11

Ich versuche, eine MySQL-Dump-Datei zu importieren.

Die Datei wurde auf einem Linux-Server erstellt, ich versuche unter Windows zu importieren

Ich habe mich in die Kommandozeile eingeloggt und ausgeführt:

SOURCE c:/dump.sql

Dies scheint jedoch einige Probleme mit dem Zeichensatz verursacht zu haben (insbesondere bei intelligenten Anführungszeichen und anderen nicht standardmäßigen Interpunktionen).

Es wurde mir vorgeschlagen, dass ich renne:

mysql -u username -d dbase < c:\dump.sql

Wenn ich das versuche, bekomme ich den Fehler

ERROR 2006 (HY000) at line 149351: MySQL server has gone away

Ein bisschen googeln deutete darauf hin, dass dies mit dem Schalter max_allowed_packet zu tun hatte, aber ich habe es versucht und es hat nicht funktioniert. Hat jemand eine Idee was das sein könnte?

Wenn jemand einen Vorschlag zum Problem mit dem Zeichensatz hat, wäre dies ebenfalls hilfreich.

Jeremy French
quelle
Irgendeine Anregung? [15 Zeichen erforderlich, um zu kommentieren]
Mihai Limbăşan

Antworten:

23

Mein erster Instinkt nach dem Lesen der Fehlermeldung im Fragentitel war, die Erhöhung von max_allowed_packet vorzuschlagen. Sie haben erwähnt, dass Sie "diesen Schalter" ausprobiert haben und es nicht funktioniert hat. Können Sie bestätigen, dass Sie die Konfigurationsdatei des Servers korrekt geändert haben? Ihre Formulierung lässt es so klingen, als hätten Sie versucht, dies als Befehlszeilenschalter in der Client-Befehlszeile von mysql.exe zu verwenden, was nicht dazu führen würde, dass der Server das Verhalten ändert.

Kurz gesagt, Sie sollten versuchen, die my.cnf-Datei zu suchen und zu bearbeiten, die Ihr Server derzeit verwendet. [mysqld]Ändern Sie im Abschnitt die Einstellungen für max_allowed_packet in etwa

[mysqld]
max_allowed_packet=32M

Vergessen Sie nicht, den Server nach dem Ändern der Konfiguration neu zu starten.

Ich habe 32M (ein lächerlich großer Wert) als Beispiel verwendet. Da Ihre Abfrage enorm zu sein scheint, sollten Sie diesen Wert (oder vielleicht sogar 64 MB, wenn Sie über genügend RAM verfügen) ausprobieren, um festzustellen, ob er funktioniert.

Eine andere Möglichkeit besteht darin, den Server unverändert zu lassen und das Verhalten des Clients zu ändern, der zum Generieren des SQL-Dumps verwendet wird. Sagen Sie ihm, er soll die Größe der einzelnen Abfragen auf unter 1 MB beschränken - das sollte auch reichen.

Weitere Einzelheiten finden Sie unter B.1.2.10. Paket im MySQL-Handbuch zu groß .

Mihai Limbăşan
quelle
1
Ja, ich habe nur den Befehlszeilenschalter ausprobiert. Der Grund, warum ich dachte, dass es einen Effekt hat, war, dass es einen maximal zulässigen Paketfehler zu klein gab, wenn ich es auf etwas kleineres setzte. Ich werde Ihren Vorschlag am Montag versuchen. Vielen Dank
Jeremy French
Gern geschehen - ich bin mir fast sicher, dass dies funktionieren wird. Leider neigen die Fehlermeldungen von MySQL, wie bei vielen (okay, den meisten) anderen Softwareprogrammen, die in den letzten 50 Jahren geschrieben wurden, dazu, zu saugen und irreführend zu sein, wenn Sie nicht bereits mit der Funktionsweise des Entwicklers vertraut sind :).
Mihai Limbăşan
Freut mich das zu hören - viel Spaß.
Mihai Limbăşan
Sehr sehr toll. Ich hatte das gleiche Problem, kam hierher, um die Frage zu stellen und bam! gelöst. @ Mihai - was auch immer Sie bezahlt bekommen; es ist nicht genug :)
Steven Evers
Diese Lösung hat uns geholfen, als wir diesen Fehler erhielten, nachdem wir MySQL von localhost auf einen Remote-Server verschoben hatten. Vielen Dank!
Lea Cohen
1

Unter MySQL 5.7.24 lag es an der alten Konfiguration von MySQL 5.6

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION. 

Die folgende Option ist obligatorisch, wenn die SQL-Version mit 5.7.5 oder höher identisch ist.

sql_mode=TRADITIONAL

Außerdem gibt es in /etc/my.cnf zwei max_allowed_packet-Parameter , der andere ist für mysqldump. Bitte beachten Sie das gleiche.

max_allowed_packet = <1G>

Meine Installation ist unter CentOS7.

Krishna Pandey
quelle
0

Können Sie über die Linux-Box auf die MySQL-Instanz auf dem Windows-Server zugreifen?

Wenn ja, können Sie den Befehl auf der Linux-Box mit dem Schalter -h ausführen, um eine Verbindung zum Server auf der Windows-Box herzustellen?

mysql -u username -d dbase -h <windows host> < dump.sql

Dies könnte Ihre Zeichensatzprobleme lösen , da Sie den Linux-Client auf der Originalverpackung verwenden, um den Import durchzuführen. (nur eine Vermutung)

Brent
quelle
0

Was sagt das MySQL-Protokoll?

Manchmal wird dieser Fehler auf dem Client gemeldet, wenn auf dem Server ein nicht korrigierbarer Fehler vorliegt. Dies kann ein Indikator für eine Beschädigung der Datenbanktabellen auf der Festplatte sein.

Dave Cheney
quelle
-1

Hatte Ihr Konto ein Passwort? Möglicherweise müssen Sie den Schalter -p hinzufügen:

mysql -u username -p -d dbase < c:\dump.sql
Brent
quelle
Oh - wahrscheinlich nicht, da es einen Weg in den Import gescheitert zu sein scheint.
Brent