web-dev-qa-db-ja.com

MySQL-大きなテーブルでのMySQLDumpの問題

私は10.6GBのMySQLデータベースを持っています-MyISAMテーブルとInnoDBテーブルの両方があります。 1つの特定のテーブル(「レスポンス」と呼ばれます)は8Gbです-このテーブルはInnoDBです。

ライブデータベースは別のサーバーに複製され、MySQLDumpを使用してバックアップをレプリケーションサーバーから取得します。ライブサーバーはWindowsを実行しますが、レプリケーションサーバーはCentOSを実行します。

MySQLDumpコマンドは次のとおりです。

mysqldump --verbose --lock-tables=true --max-allowed-packet=1024M --Host=192.168.1.182 --user=myusername --password=mypassword --opt --databases databasename > databasename.sql

コマンドは「responses」テーブルの途中まで実行されます-取得時:エラー2013-行12891212でテーブル応答をダンプするときにクエリ中にMySQLサーバーへの接続が失われました

いくつかグーグルした後、MySQLDumpに次のコマンドを追加しました(独立して同時に)。

--net-buffer-length=32704

そして

--skip-extended-insert

同じ場所でまだエラーが発生しました。

完全を期すために、NaviCatとMySQL Workbenchでデータベースをダンプしてみました-どちらも同じエラーを返します。

だから、腐敗の問題なのかと思いました。 (レプリケーションサーバーで)以下を実行しようとしました。

CHECK TABLE responses;

そして

CHECK TABLE responses EXTENDED;

どちらも次のエラーを返しました。エラー2013-クエリ中にMySQLサーバーへの接続が失われました。

ライブデータベースは非常にビジー状態なので、少し心配です...ライブテーブルでCHECK TABLEを開始しましたが、当然のことながら、アプリケーションが停止したため、停止する必要がありました。

ここでアドバイスがあれば歓迎します...最終的な目標は、MySQLDumpを使用してバックアップを機能させることです。

ありがとう

更新:NaviCatを使用して(レプリケーションサーバー上の)テーブルを別のサーバー上の新しいデータベースにコピーしようとしました-同じメッセージで失敗しました(転送されたレコード:12,889,214):エラー2013-クエリ中にMySQLサーバーへの接続が失われました

7
JezB

あなたの問題はネットワークから生じています。この場合、それはネットワーク上のデータ送信に使用されるバッファではありません。これは、ネットワークがそうすることで生き続けることを試みる時間の長さです。

これらのオプションに注意してください:

  • net_read_timeout (デフォルト30):読み取りを中止する前に、接続からのデータを待つ秒数。サーバーがクライアントから読み取っている場合、net_read_timeoutは、いつ打ち切るかを制御するタイムアウト値です。サーバーがクライアントに書き込んでいるとき、net_write_timeoutはいつ打ち切るかを制御するタイムアウト値です。 slave_net_timeoutも参照してください。
  • net_write_timeout (デフォルト60):書き込みを中止する前に、接続へのブロックの書き込みを待機する秒数。 net_read_timeoutも参照してください。

サーバーがビジーで、ある時点で、mysqldumpを続行するために読み取る必要があるデータがタイムアウトになる。

私が過去に行ったことは、ソースサーバーとターゲットサーバーの両方で以下を実行することです。

mysql> SET GLOBAL net_read_timeout = 31536000;
mysql> SET GLOBAL net_write_timeout = 31536000; 

次に、mysqldumpを実行します。

これらの値を非常に高く設定すると、mysqldump DB接続はデータが送信されるまで長時間待機します。ご参考までに、数値31536000は1年の秒数です(365 * 24 * 60 * 60)。 mysqldump DB接続は、データが(最終的に)到着するまで、ビジー状態のサーバーであっても、待機したままにする必要があります。 Jan 12, 2012からの投稿をご覧ください: MySQLクエリが実行されている間、クライアントがタイムアウトしますか?

GRY IT A TRY !!!

UPDATE 2018-01-04 09:53 EST

私はあなたのコメントに気づきました

Mysqldumpから取得したエラーメッセージに注意してください。

エラー2013-行12891212でテーブルの応答をダンプすると、クエリ中にMySQLサーバーへの接続が失われる

行番号12891212をメモしてください。 mysqldumpが失敗するたびにエラーメッセージでその行番号が返される場合は、データの破損が疑われます。ただし、mysqldumpの試行ごとに異なる行番号を取得する場合、これは、mysqldump接続が大きなテーブルに沿って移動し、タイムアウトとランダムポイントを移動できることを示しています。

それらの値を設定し、mysqldumpを再試行してください。その後、戻って何が起こったかを教えてください。

7
RolandoMySQLDBA