問題の説明
ApsaraDB RDS for MySQLインスタンスでmysqldumpコマンドを実行すると、プライマリ /セカンダリの切り替えがトリガーされます。
原因
RDSインスタンスのテーブルでmysqldumpコマンドを実行するときに
-- master-data
パラメーターを使用しているが、-- single-transaction
パラメーターを使用しない場合、コマンドの実行後にFLUSH TABLES WITH READ LOCKステートメントが実行されます。 そのため、mysqldumpコマンドを実行すると、テーブルに対してDML操作を実行できません。 DML操作が長期間実行できない場合、高可用性 (HA) システムの障害検出メカニズムが失敗します。 この場合、プライマリRDSインスタンスとセカンダリRDSインスタンスの切り替えが実行されます。 説明 HAコンポーネントがプライマリRDSインスタンスで定期的にDMLステートメントを実行し、ステートメントが長期間実行されない場合、HAシステムの障害検出メカニズムは失敗します。
解決策
mysqldumpコマンドの実行時に -- master-data
パラメーターを使用する場合は、-- single-transaction
パラメーターも使用する必要があります。 このように、一貫性のあるビューが提供され、データの一貫性が保証される。 次に、UNLOCK TABLESステートメントを実行して、テーブルのロックを解除できます。 データのエクスポート中にDML操作を実行でき、プライマリ /セカンダリの切り替えはトリガーされません。
サンプルコマンド:
mysqldump -h127.0.0.1 -usystem -p123456 -- master-data=2 -- single-transaction -- set-gtid-purge=OFF -- all-databases -- triggers -- events -- routines> /tmp/all_master.sql