私はこれを正確に行うことについて話している多くのサイトを見つけましたが、いくつかの重要な詳細を見逃しています。一般的な手順は
- 走る
FLUSH TABLES WITH READ LOCK
- ZFSスナップショットを撮る
- 走る
UNLOCK TABLES
さまざまな情報源は、私が使用しているInnoDBは実際にはを尊重しないと報告していFLUSH
ます。MySQLユーザーマニュアルFLUSH TABLES...FOR EXPORT
には、InnoDBで使用するバリアントがありますが、データベース全体をバックアップするのではなく、各テーブルを個別に指定する必要があると記載されています。テーブルのリストが実際に存在するテーブルと同期しなくなる可能性があるため、各テーブルを個別に指定することは避けたいと思います。
私が抱えている他の問題は、私がのようなことをする予定であったことですmysql -h"$HOST" -u"$USERNAME" -p"$PASSWORD" --execute="FLUSH TABLES WITH READ LOCK"
。ただし、これにより、セッションが終了した直後にロックが解除されます。これは理にかなっていますが、スナップショットを撮るときに読み取りロックを保持する必要があるため、かなり面倒です。
私の他のアイデアは、Percona XtraBackupのようなツールを使用してホットバックアップを作成し、バックアップのスナップショットを取得することですが、スナップショットを作成するためだけにすべてのデータを2番目の場所に書き込むコストを払わないことを望みます。