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.

garfink
quelle
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

RolandoMySQLDBA
quelle
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.

echte Gadha
quelle
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
Jesus Uzcanga
quelle
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

Ranjeet Ranjan
quelle
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?

user126897
quelle