sql >> データベース >  >> RDS >> Mysql

max_allowed_pa​​cketパラメータを使用してもmysqldumpを使用すると、mysqlへの接続が失われます

    --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" | \
              ...
    

    すべての行を取得するまで。首の痛みですが、うまくいきます。



    1. 高可用性のためにMariaDBクラスターをデプロイする方法

    2. Neo4j-Cypherを使用してインデックスを削除する

    3. mysqlテーブルのインデックスを再作成する方法

    4. MySQLダイナミックピボット