Amazon RDS MySQL mysqldump加--single-transaction报错及相关问题咨询
Amazon RDS MySQL 8.0 mysqldump备份问题分析与解决
错误原因
当你使用--single-transaction结合--databases参数备份RDS MySQL 8.0时,mysqldump会尝试执行FLUSH TABLES WITH READ LOCK来获取全局GTID(全局事务标识符)的一致性状态——这是MySQL 8.0默认开启GTID后的行为。但Amazon RDS的admin用户默认没有执行这个语句的权限,所以直接抛出权限拒绝错误。
移除--single-transaction后的锁表影响
是的,移除该选项后,mysqldump会采用锁表备份的方式保证数据一致性:
- 所有要备份的表(无论存储引擎是InnoDB还是MyISAM)都会被加上读锁,直到整个备份过程完成。
- 读锁会阻塞所有针对这些表的写入操作,可能导致业务写入延迟甚至失败,对生产环境影响较大。
最终解决方案
添加--set-gtid-purged=off参数即可解决问题,最终命令如下:
mysqldump -h source_MySQL_DB_instance_endpoint ^ -u user ^ -ppassword ^ --port=3306 ^ --single-transaction ^ --routines ^ --triggers ^ --set-gtid-purged=off ^ --databases database database2 > path\rds-dump.sql
这个参数会禁用mysqldump对GTID信息的收集,也就不会触发FLUSH TABLES WITH READ LOCK操作,同时保留--single-transaction的优势:通过启动一致性读事务,实现InnoDB表的无锁备份,完全不影响业务写入;对于MyISAM这类非事务引擎的表,依然会被加读锁,这是这类引擎的特性,无法避免。
内容的提问来源于stack exchange,提问作者Astora
相关产品推荐
相关产品推荐

