执行mysqldump命令导致实例主备切换

问题现象

在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