问题现象
在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
文档内容是否对您有帮助?