Aurora MySQL导出复制数据遇权限及Reader实例问题求助
Aurora MySQL导出数据用于外部复制的解决方案
为什么mysqldump --master-data=1会报错?
Aurora MySQL不允许给普通用户授予SUPER权限,而--master-data=1会自动执行FLUSH TABLES WITH READ LOCK和SHOW MASTER STATUS,这些操作需要RELOAD和REPLICATION CLIENT权限,普通用户没有这些权限,所以触发1045权限错误。
关于Aurora的「Add a reader」选项
AWS Aurora里的「Add a reader」创建的就是官方文档提到的只读副本,只是控制台命名不同。Reader节点会实时同步主实例数据,你看到的「replica latency」就是复制延迟的证明——它本质就是只读副本,并非“具备只读权限的主实例”,只是Aurora的集群架构让它看起来和主实例形态相似。
正确的导出步骤(用于启动外部复制)
方法1:通过Reader节点导出
- 暂停Reader节点的复制
登录AWS控制台,找到你的Aurora集群,选中Reader实例,进入「Actions」→「Stop replication」,让节点暂停同步主实例,保持当前数据状态。 - 执行mysqldump并获取复制位点
直接在Reader节点上执行导出(无需加锁,因为节点本身只读):
接着连接Reader节点,执行mysqldump -h <reader节点端点> -u <用户名> -p --single-transaction --databases <要导出的数据库名> > dump.sqlSHOW MASTER STATUS;,记录返回的File(binlog文件名)和Position(偏移量)——Aurora的binlog文件名格式一般是aurora-binlog.000001这类。 - 恢复Reader节点复制(可选)
如果还需要这个Reader节点继续同步主实例,回到控制台选「Actions」→「Start replication」即可。
方法2:直接在主实例上导出(无需Reader节点)
通过开启一致性快照事务绕过锁的限制:
- 开启事务并记录复制位点
连接主实例,执行以下SQL,不要关闭这个连接:
把START TRANSACTION WITH CONSISTENT SNAPSHOT; SHOW MASTER STATUS;File和Position的值记下来。 - 执行mysqldump
在另一个终端运行导出命令:mysqldump -h <主实例端点> -u <用户名> -p --single-transaction --databases <要导出的数据库名> > dump.sql - 提交事务释放资源
回到之前的SQL连接,执行COMMIT;。
启动外部实例的复制
- 导入dump文件
在目标MySQL实例上运行:mysql -h <目标实例端点> -u <用户名> -p < dump.sql - 配置复制参数
连接目标实例,执行:CHANGE MASTER TO MASTER_HOST='<Aurora主实例端点>', MASTER_USER='<复制专用用户名>', MASTER_PASSWORD='<密码>', MASTER_LOG_FILE='<刚才记录的binlog文件名>', MASTER_LOG_POS=<刚才记录的偏移量>; - 启动复制
根据MySQL版本执行:-- MySQL 5.7及以下 START SLAVE; -- MySQL 8.0及以上 START REPLICA; - 检查复制状态
-- MySQL 5.7及以下 SHOW SLAVE STATUS\G; -- MySQL 8.0及以上 SHOW REPLICA STATUS\G;
关键注意事项
- 提前在Aurora主实例创建复制专用用户,授予
REPLICATION SLAVE权限:CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; FLUSH PRIVILEGES; - 确保Aurora集群已开启binlog:在集群参数组中设置
log_bin=1,如果参数是静态的,需要重启集群生效。 - 如果目标实例也是Aurora集群,优先用AWS官方的跨区域/跨账号复制功能,比手动导出更稳定高效。
内容的提问来源于stack exchange,提问作者Andrei Stoica
相关产品推荐
相关产品推荐

