私が認識しているこの問題への2つの基本的なアプローチがあります。まず、Myisamの代わりにInnoDBを実行している場合は、トランザクションでバックアップを実行できます(--single-transaction --lock-tables = FALSE)。 --master-dataは、レプリケーションの位置情報を含む一貫したバックアップを提供します。ログをフラッシュすると、ダンプが作成される前にログがリセットされます。つまり、位置は常に106になり、-master-dataはログファイルの名前と位置をダンプファイルに書き込みます。もちろん、-master-dataを機能させるには、これをマスター上で実行する必要があります。
あなたが述べた2番目の方法は、3番目のホストを使用してバックアップを作成することです。この場合、レプリケーションを停止し、DBが読み取り専用であることを確認してください(ただし、レプリケーションからの書き込みには影響しないため、すべてのレプリカは読み取り専用にする必要があります)。次に、バックアップを作成し、レプリケーションの位置を記録します。この場合、-master-dataは使用できません。代わりに、次のようなことをするかもしれません:
echo 'stop slave' | mysql {options)
mysqldump {your options} > DB.sql
echo 'show slave status\G' > DB.replication
echo 'start slave' | mysql {options)
このバックアップから復元する必要がある場合は、復元を実行してから、レプリケーションをセットアップし、2つのパラメーターmaster_log_fileとmaster_log_posがDB.replicationファイルから取得されるようにします。
master_log_file = value of Master_Log_File
master_log_pos = value of Exec_Master_Log_Pos
注:別のレプリカからテストすることもできます。
追加の注記:レプリカのプールがある場合(たとえば、Webアプリの読み取りと書き込みを分離した場合)、レプリカが新しいマスターと同期していない可能性があります。これは、レプリカが非同期にストリーミングし、フェイルオーバー時にスタンバイが他のレプリカと同じ位置にあるという保証がないため、書き込みI / Oの負荷が高いときにフェイルオーバーが発生した場合に発生する可能性があります。しかし、これはまだ私には起こりません...