--quick
を追加してみてください mysqldump
のオプション 指図;大きなテーブルでうまく機能します。テーブル全体を丸呑みしてから書き出すのではなく、結果セットから出力に行をストリーミングします。
mysqldump -uroot -h my.host -p'mypassword' --quick --max_allowed_packet=512M db_name table_name | \
gzip > dump_test.sql.gz
--compress
を追加することもできます mysqldumpコマンドのオプション。これにより、MySQLサーバーへのよりネットワークに適した圧縮接続プロトコルが使用されます。 gzip
がまだ必要であることに注意してください パイプ; MySQLの圧縮プロトコルでは、ダンプがmysqldump
から出てくることはありません。 圧縮されています。
サーバーがmysqldump
への接続をタイムアウトしている可能性もあります クライアント。タイムアウト期間をリセットしてみてください。他の方法でサーバーに接続し、これらのクエリを発行してから、mysqldump
を実行します 仕事。
これらはタイムアウトを1暦日に設定します。
SET GLOBAL wait_timeout=86400;
SET GLOBAL interactive_timeout=86400;
最後に、サーバーがマシンから遠く離れている場合(ルーターやファイアウォールを介して)、何かがmysqldump
を混乱させている可能性があります。 の接続。一部の劣ったルーターとファイアウォールには、NAT(ネットワークアドレス変換)セッションに時間制限があります。それらは、それらが使用されている間、それらのセッションを存続させることになっていますが、そうでないものもあります。または、外部接続用に会社が設定した時間またはサイズの制限に達している可能性があります。
サーバーに近いマシンにログインして、mysqldump
を実行してみてください 次に、他の手段(sftp?)を使用して、gzファイルを自分のマシンにコピーします。
または、このファイルのダンプをセグメント化する必要がある場合があります。このようなことを行うことができます(デバッグされません)。
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....
次に、これらの行でそれを繰り返します。
--where="id>=1000000 AND id < 2000000" | \
--where="id>=2000000 AND id < 3000000" | \
...
すべての行を取得するまで。首の痛みですが、うまくいきます。