MySQLにすべての「進行中の」トランザクションを完了するように指示しますが、ZFSまたはLVMスナップショットを撮るまで(1秒未満)、新しいトランザクションの開始を遅らせる(クライアントのシャットダウンなし)ようにするにはどうすればよいですか?
例えば
- MySQLを一時停止し、「進行中」のトランザクションが完了するのを待ちます。
- ディスクに同期
- ZFS/LVM スナップショットの作成
- MySQLの復元このタスクの目的は、バックアップ用に一貫したスナップショットを取得することです。ステップ2は1秒もかかりません。
手順1でクライアントエラーが発生してはいけません。手順4に達するまでしばらく一時停止してください。
1と4を実行できるMySQLコマンドはありますか?これらは何ですか?
ベストアンサー1
賢明なアプローチは、トランザクションが完了するのを待つことです。
mysql> FLUSH LOCAL TABLES;
Query OK, 0 rows affected (11.31 sec)
その後、読み取りロックを取得します。
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (22.55 sec)
これで、セッションが終了するまですべてのクエリがブロックされます(つまり、ロックが解除されるのを待ちます)。参考にしてください。すべての取引が完了するまで待つ必要があります。ワークロードによっては時間がかかる場合があります(数百万行の更新...)。
必要なスクリプト言語でコーディングできます。
しかし、真剣に - なぜ使用しないのですか?スーパーバックアップ?これはmysqlの一貫したスナップショットを処理し、それをファイルシステムにダンプしてzfs / lvmスナップショットを作成できます。