背景:我在AWS云部署了两台RDS,这里暂且称呼为A库和B库,当我想把A库的某些数据备份到B库的时候,发生报错。
具体操作如下:
第一步,在A库进行数据库的备份,使用Mysqldump命令
mysqldump productiondb -h productionrds.xxxx.us-east-1.rds.amazonaws.com -u productiondb -pxxxxxxxx --column-statistics=0 --no-tablespaces > production.sql
-
--column-statistics=0 或 --column-statistics=1
这个选项用于控制是否包括数据库统计信息,如某列的数据分布等。如果设置为0,则不包括统计信息;如果设置为1,则包括统计信息。
-
--no-tablespaces
这个选项用于控制是否包括表空间的信息。如果使用了这个选项,那么在导出的SQL文件中就不会包含任何关于表空间的信息。
第二步,在B库进行数据的导入
mysql productiondb -h stagingrds.xxxx.us-east-1.rds.amazonaws.com -u productiondb -pxxxxxxxx < production.sql
这个时候发生关键报错!!!
ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER, SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation
从报错的问题来看,是root用户没有SYSTEM_VARIABLES_ADMIN权限,需要去进行授权
grant SYSTEM_VARIABLES_ADMIN on *.* to 'root';
flush privileges;
亲测之后发现根本没用!!!
实际上不是权限的问题。
我找到了一些其他 AWS MySQL RDS 参考资料,当您使用 AWS MySQL RDS 实例时,并非所有 MySQL 命令都受支持。
因此,在还原时,即使您认为自己具有管理员权限,也并非所有权限都可用。因此,我想出了以下有效的命令行,在导出的时候,加上参数--set-gtid-purged=OFF,禁掉全局事务标识符。
mysqldump
-h productionrds.xxxx.us-east-1.rds.amazonaws.com
-u productiondb
-pxxxxxxxx
--set-gtid-purged=OFF
--databases productiondb
> production.sql
将新生成的sql文件重新导入B库,成功还原!