問題現象
在RDS MySQL執行個體中執行mysqldump命令導致執行個體主備切換。
可能原因
由於在執行mysqldump命令時使用了
--master-data參數,並且沒有使用--single-transaction參數,導致mysqldump命令會執行FLUSH TABLES WITH READ LOCK,進而導致在mysqldump命令執行的整個過程中都無法對錶執行DML操作。由於長時間不能執行DML操作,導致執行個體HA探活失敗,執行個體就會發起主備切換。說明 執行個體HA探活,指HA組件定期在主執行個體上執行DML語句,若長時間執行失敗,則探活失敗。
解決方案
在執行mysqldump命令時,如果使用了--master-data參數,需要同時使用--single-transaction參數。使用了--single-transaction參數後,會開啟一個一致性視圖,通過該一致性視圖保證資料的一致性,然後執行UNLOCK TABLES,解除之前對錶的鎖定。所以在匯出資料的過程中,可以正常執行DML操作,不會導致執行個體主備切換。
命令執行樣本:
mysqldump -h127.0.0.1 -usystem -p123456 --master-data=2 --single-transaction --set-gtid-purged=OFF --all-databases --triggers --events --routines> /tmp/all_master.sql