Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verbindung zu mysql verloren, wenn mysqldump verwendet wird, selbst mit dem Parameter max_allowed_packet

Versuchen Sie, --quick hinzuzufügen Option zu Ihrem mysqldump hinzufügen Befehl; es funktioniert besser mit großen Tabellen. Es streamt die Zeilen aus der Ergebnismenge zur Ausgabe, anstatt die gesamte Tabelle zu schlürfen und sie dann auszugeben.

 mysqldump -uroot -h my.host -p'mypassword' --quick --max_allowed_packet=512M db_name table_name | \
 gzip  > dump_test.sql.gz

Sie können auch versuchen, --compress hinzuzufügen Option zu Ihrem mysqldump-Befehl. Dadurch wird das netzwerkfreundlichere komprimierte Verbindungsprotokoll zu Ihrem MySQL-Server verwendet. Beachten Sie, dass Sie immer noch das gzip benötigen Rohr; Das komprimierte Protokoll von MySQL bewirkt nicht, dass der Dump aus mysqldump kommt komprimiert.

Es ist auch möglich, dass der Server seine Verbindung zu mysqldump zeitlich begrenzt Klient. Sie können versuchen, die Timeout-Dauern zurückzusetzen. Stellen Sie auf andere Weise eine Verbindung zu Ihrem Server her und führen Sie diese Abfragen aus. Führen Sie dann Ihren mysqldump aus Arbeit.

Diese setzen die Timeouts auf einen Kalendertag.

    SET GLOBAL wait_timeout=86400;
    SET GLOBAL interactive_timeout=86400;

Schließlich, wenn Ihr Server weit entfernt von Ihrem Rechner ist (durch Router und Firewalls), kann etwas mysqldump stören s Verbindung. Einige minderwertige Router und Firewalls haben Zeitbegrenzungen für NAT-Sitzungen (Network Address Translation). Sie sollen diese Sitzungen am Leben erhalten, während sie verwendet werden, aber einige tun dies nicht. Oder vielleicht stoßen Sie an eine Zeit- oder Größenbeschränkung, die von Ihrem Unternehmen für externe Verbindungen konfiguriert wurde.

Versuchen Sie, sich bei einem Rechner anzumelden, der näher am Server liegt, und führen Sie mysqldump aus Verwenden Sie dann andere Mittel (sftp?), um Ihre gz-Datei auf Ihren eigenen Computer zu kopieren.

Oder Sie müssen den Dump dieser Datei möglicherweise segmentieren. Sie können so etwas tun (nicht debuggt).

mysqldump  -uroot -h my.host -p'mypassword'  \ 
          db_name table_name --skip-create-options --skip-add-drop-table \
          --where="id>=0 AND id < 1000000" | \
          gzip....

Dann wiederholen Sie das mit diesen Zeilen.

          --where="id>=1000000 AND id < 2000000" | \

          --where="id>=2000000 AND id < 3000000" | \
          ...

bis Sie alle Zeilen erhalten. Schmerzen im Nacken, aber es wird funktionieren.