我使用的是AWS docummentation中的命令
mysqldump -h source_MySQL_DB_instance_endpoint ^
-u user ^
-ppassword ^
--port=3306 ^
--single-transaction ^
--routines ^
--triggers ^
--databases database database2 > path\rds-dump.sql
但我得到了错误:
mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'admin'@'%' (using password: YES) (1045)
此命令仅在删除--single-transaction
选项时有效。为什么?为什么?
我的MySQL RDS版本是8.0.33
在这种情况下,删除--single-transaction
时,Amazon RDS MySQL中的所有表都被锁定?
更新
感谢@Quassnoi,添加了--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
1条答案
按热度按时间guykilcj1#
如果您的服务器设置为生成GTID(全局事务标识符),则即使启用了
--single-transaction
,mysqldump
也需要锁定表。如果您将转储加载到复制集群的一部分服务器上,则需要避免复制的某些竞争条件。如果同时使用
gtid_mode=ON
和--set-gtid=purged=ON|AUTO
,则--single-transaction
需要RELOAD
或FLUSH_TABLES
权限。此要求是在MySQL 8.0.32中添加的。如果您的服务器上没有启用GTID(并且您在注解中指定了它没有启用),则不需要这样做,并且
mysqldump
不应该发出FLUSH TABLES WITH READ LOCK
。有一个bug仍然使它锁定,但它应该在8.0.33(您正在使用的版本)中得到修复。也许它还在那里
尝试运行8.1或8.0.31版本的
mysqldump
,看看它是否修复了这个问题。如果不使用转储填充副本,也可以将变量
--set-gtid-purged
设置为off。