mysqldump Error 2013


18

Ich habe eine Datenbank installiert, die ich in MySQL sichern möchte. Das Problem tritt mysqldumpbeim Exportieren der Tabelle 'maia_mail' auf

# mysqldump -u root -p maia > maia.sql
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `maia_mail` at row: 15

Es läuft weniger als 30 Sekunden und zeigt Fehler wie oben an.

Die Gesamtgröße der Datenbank beträgt 1,3 GB, wobei die Tabelle maia_mail 1,0 GB beträgt

In my.cnfdiesem Set habe ich:

[mysqld]
max_allowed_packet      = 1300M
[mysqldump]
max_allowed_packet      = 1300M

Bitte geben Sie Ratschläge oder Anleitungen, wie Sie die Datenbank sichern können.


170 GB freier Speicherplatz. Es ist auch das gleiche, ob ich Dump auf Maschine Db ist oder Remote
Garfink

Kopien der E-Mail so varchar Daten vor allem
Garfink

Bei der 1300M handelt es sich um eine kürzlich vorgenommene Änderung. Das Problem trat auch auf, als die Standardeinstellung 16M verwendet wurde. Der Server wurde auch nach dem Wechsel auf 1300M neu gestartet.
Garfink

Ich habe auf die 16M-Standardeinstellung zurückgesetzt. Dump führt zu demselben Fehler 2013 in Zeile 15
Garfink

Antworten:


13

Ich könnte leicht vorschlagen, die InnoDB-Einstellungen zu ändern, was ein wenig umständlich sein könnte, nur um einen mysqldump zum Laufen zu bringen. Sie mögen vielleicht nicht, was ich über den Vorschlag bin, aber ich glaube, es ist Ihre beste (einzige) Option. Hier kommt's:

VORSCHLAG 1: Deaktivieren Sie erweiterte Einfügungen

Die Standardeinstellung für mysqldump würde das Zusammenfassen von Hunderten oder Tausenden von Zeilen in einem einzigen INSERT beinhalten. Dies wird als erweitertes INSERT bezeichnet. Es kommt zu einem Überlauf, der über das max_allowed_packet hinausgeht .

Ich beantwortete einen Beitrag wieder am Sep 01, 2011(der MySQL-Server hat den Import von großen Dumps behindert ), wo ich das Gleiche für den Import eines großen mysqldump besprochen habe. Ich glaube, dass das Deaktivieren von Extended INSERT auch beim Erstellen eines problematischen mysqldump helfen würde.

mysqldump -u root --skip-extended-insert -p maia > maia.sql

Schlechte Nachrichten: Was dies bewirkt, ist das Erstellen eines INSERT-Befehls für jede Zeile. Dies wird definitiv die Zeit verlängern, die benötigt wird, um den mysqldump auszuführen. Folglich wird es auch länger dauern, bis das Nachladen abgeschlossen ist (wahrscheinlich um den Faktor 10-100).

Ich habe skip-extended-insertvorher diskutiert

VORSCHLAG 2: Binärdaten als Hex (OPTIONAL) ausgeben

Um die Binärdaten des mysqldump portabler zu machen, speichern Sie diese Daten hexadezimal

mysqldump -u root --skip-extended-insert --hex-blob -p maia > maia.sql

Schlechte Nachrichten: Es wird den mysqldump ein bisschen mehr aufblähen

VERSUCHE ES !!!

Randnotiz : Die maximale Größe von max_allowed_packet beträgt 1 GB


5

Beim Versuch, eine 12-GB-Datenbank zu sichern, trat derselbe Fehler auf. Ich habe die folgenden Änderungen vorgenommen, damit es funktioniert.

  1. max_allowed_packet auf 1024M konfiguriert
  2. net_read_timeout auf 7200 konfiguriert
  3. net_write_timeout auf 7200 konfiguriert

Hinweis: Ich weiß, dass die Timeout-Werte viel zu hoch sind (7200 Sekunden, dh 20 Stunden). Aber ich tat es absichtlich, um jede Chance auszuschließen. Ich bin dabei, einen optimalen Timeout-Wert zu finden.


2
Für andere Benutzer: Diese Einstellungen werden auf dem Server vorgenommen, nicht in der mysqldump-Konfigurationsdatei. Auch 7200 Sekunden sind 2 Stunden, nicht 20.
Mark

setze globales net_read_timeout = 120; setze globales net_write_timeout = 900; arbeitete für mich
kasi

2

Fügen Sie einfach Folgendes in Ihre Konfigurationsdatei my.ini (Windows) oder my.cnf (Linux) ein.

[mysqld]
max_allowed_packet=1024M 

[mysqldump]
max_allowed_packet=1024M 
net_read_timeout=3600 
net_write_timeout=3600

2
Die Abschnitte sollten umgekehrt sein.
Hören Sie auf, Monica

1

Stellen Sie sicher, dass Sie über genügend Speicher verfügen, um Speicherauszüge zu erstellen. Bitte überprüfen Sie den Speicher während des Dumps, zB mit einem Befehl wie diesem:

free -mt

Wenn Sie während der Dump-Einnahme Speicherplatz erschöpfen, erhalten Sie

mysqldump: Fehler 2013: Verbindung verloren


1

Ich fand:

--max-allowed-packet=1G --net-buffer-length=32704

... funktioniert dort, wo es vorher (zuverlässig) nicht funktioniert hat, trotz Änderungen des Lese- / Schreib-Timeouts, TCP-Keepalives usw.

Die max_allowed_packetEinstellungen alleine haben nicht funktioniert, daher sind sie möglicherweise nicht erforderlich, wenn sie net_buffer_lengthverwendet werden. - Ralph-Bolton

Ändern max-allowed-packetund net-buffer-lengthscheint viel besser zu sein, als erweiterte Einfügungen zu deaktivieren. - Kristofer

Siehe auch Was max_allowed_packet ist groß genug und warum muss ich es ändern?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.