我们正在将生产站点迁移至 EC2/RDS
请遵循以下说明: http://geehwan.posterous.com/moving-a-production-mysql-database-to-amazon
我已经在生产服务器上设置了基于行的二进制日志记录:
mysqldump --single-transaction --master-data=2 -C -q -u root -p > 备份.sql
然后导入到 RDS 实例。没有任何问题。
由于数据库的大小以及最小的停机时间要求,我必须通过 binlogs 将 ec2 数据库更新到最新数据,但它不允许我这样做。
mysqlbinlog mysql-bin.000004 --start-position=360812488 | mysql -uroot -p -h
上面写着:
错误 1227 (42000) 第 6 行:访问被拒绝;您需要(至少一个)SUPER 权限才能执行此操作
根据 binlog 第 6 行的内容,我的猜测是它是 SQL 备份中的“写入 BINLOG”语句,并且由于 RDS 不支持此功能,因此它无法运行这些语句,或者其他什么,我真的不知道。
请帮忙。
答案1
发生这种情况的可能性最大,因为将命令作为第一个命令mysqlbinlog
写入BINLOG
输出,并且执行该命令需要SUPER
您在 RDS 上没有的权限。
要删除该命令,请使用--base64-output=NEVER
选项(注意,它还需要--read-from-remote-server --host=localhost --user username --password
)。
但是,克服了这个问题之后,可能还会遇到另一个问题,这次是使用写入输出的@@session
命令。它们也需要权限。mysqlbinlog
SUPER
我还没有找到更好的方法来sed -i '/SET @@session/d' binlog_dump.sql
删除它们然后执行导入 MySQL。