ホームページ  >  記事  >  データベース  >  mysqldump --single-transaction で alter table が発生した場合はどうすればよいですか?

mysqldump --single-transaction で alter table が発生した場合はどうすればよいですか?

零下一度
零下一度オリジナル
2017-07-27 16:46:511561ブラウズ

テスト環境:

MySQL 5.5.14

データベースtestdb01の下にテーブルtb1001があります。現在のテーブルには2つのデータがあります:

##===========。 === ============================================##

空のセットがエラーなく返されたことがわかりました。

これは、私の同僚の操作の現象も合理的に説明しています。mysqldump プロセス中に、テーブル構造が変更され、変更操作はブロックされず、mysqldump 操作は「正常に完了」しました。

SELECT /*!40001 SQL_NO_CACHE */ * FROM `tb1001` オペレーションはエラーやデータを返さないため、mysqldump プロセスは tb1001 を空のテーブルとして扱い、すべてのテーブルがエクスポートされるまで後続のテーブルのエクスポートを続行します。その後、実行成功ステータスを返します。ただし、エクスポートされたバックアップにはすでに tb1001 のデータがありません。このバックアップを使用してデータを復元すると、必然的に「データの損失」が発生します。

解決策:

MySQL 5.5 バージョンでテーブルを変更する前に、まず現在のサーバーが mysqldump 操作を実行しているかどうかを確認して、2 つの操作の並列実行を回避します。

mysqldump によってエクスポートされたテーブルを変更する場合、mysqldump が終了するまで変更操作はブロックされます。この状況は MySQL バージョン 5.6 と一致します。

概要:

MySQL バージョン 5.5 の場合、mysqldump はテーブル変更操作と同時に実行されます:

テーブル変更操作が「mysqldump が開かれた後、変更されたテーブル データがエクスポートされるまで」の期間内に開始される場合"、テーブル変更操作は正常に完了し、mysqldump の実行は失敗しませんが、変更されたテーブルのデータを正常にエクスポートできません;

"mysqldum がエクスポートした時間内にテーブル変更操作が開始された場合、 「テーブル データを変更していますが、mysqldump 操作はまだ完了していません」というメッセージが表示された場合、テーブルは変更されます。操作はブロックされますが、mysqldum は正常に完了できます。mysqldump 操作が完了すると、テーブル変更操作は通常どおり実行できます。

MySQL バージョン 5.5 の場合、バックアップ内の変更されたテーブルのデータが失われ、データの不整合が発生することを避けるために、mysqldump 操作とテーブル変更操作を同時に実行しないようにする必要があります。

以上がmysqldump --single-transaction で alter table が発生した場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。