Ber*_*ard 4 mysql mysqldump rds
我正在亚马逊RDS上运行一个mysql 5.6服务器并设置一个我用来使用mysqldump创建备份的只读副本.
我尝试使用"--all-databases"选项,但是当我尝试导入mysqldump创建的SQL时,我最终得到了mysql命令客户端的错误:
ERROR 1465 "Triggers can not be created on system tables"
Run Code Online (Sandbox Code Playgroud)
我使用了"--all-databases",因为我基本上想要恢复RDS中的所有内容,就像以前发生崩溃一样.
也许这是错的,我应该只选择我的模式(加上mysql.users表)?但是什么是"--all-databases"首先,如果它永远不会工作?或者我使用它错了?
经过与亚马逊支持的更长时间的对话,这就是我想出的:
触发问题可以通过临时将mysql配置设置log_bin_trust_function_creators设置为1来解决
他们不建议拍摄完整快照,而是选择单个数据库.
这意味着您必须在恢复中执行两个步骤:
使用视图,您可能会遇到错误消息
第xxx行的错误1227(42000):拒绝访问; 您需要(至少一个)此操作的SUPER权限
显示的是因为mysqldump在创建视图中创建了一个definer语句(甚至你的root用户也没有足够的权限来设置它).如上所述这里,摆脱他们的唯一方法是过滤,我这样做:
sed -i's/^/.. 50013 DEFINER =.*SQL SECURITY DEFINER .. $/ - 删除安全定义语句/ g'
这是令人尴尬的,有让数据库备份出来的RDS需要这么多的体力劳动,而且还回去.在任何情况下,你应该依靠其自动RDS只作了备份,因为这些可能会被恶意攻击者可以很容易地删除获得了对您的AWS账户的访问权限.
导入 withmysql -f以跳过有问题的过程。
就我而言,跳过的定义是这个小宝石:
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`rdsadmin`@`localhost`*/ /*!50003 trigger block_proc_u before update on proc
for each row
BEGIN
DECLARE foo varchar(255);
if old.Definer = "rdsadmin@localhost" then
select `ERROR (RDS): CANNOT MODIFY RDSDMIN OBJECT` into foo;
end if;
END */;;
Run Code Online (Sandbox Code Playgroud)
再加上另外四个非常相似的(总共跳过了五个)。
| 归档时间: |
|
| 查看次数: |
3039 次 |
| 最近记录: |