从mysqldump创建的SQL恢复后,ERROR 1465“无法在系统表上创建触发器”

我正在亚马逊RDS上运行 mysql 5.6服务器并设置一个我用来使用mysqldump创建备份的只读副本.

我尝试使用“–all-databases”选项,但是当我尝试导入mysqldump创建的SQL时,我最终会从mysql命令客户端发出此错误:

ERROR 1465 "Triggers can not be created on system tables"

我使用了“–all-databases”,因为我基本上想要恢复RDS中的所有内容,就像以前发生崩溃一样.

也许这是错的,我应该只选择我的模式(加上mysql.users表)?但是什么是“–all-databases”首先,如果它永远不会工作?或者我使用它错了?

经过与亚马逊支持的更长时间的对话,这就是我想出的:

>可以通过将mysql配置设置log_bin_trust_function_creators临时设置为1来解决触发器问题
>他们不建议拍摄完整快照,而是选择单个数据库.
>这意味着您必须在恢复中执行两个步骤:

>创建架构
>创建用户并为他们授予必要的权限
>导入转储数据

>对于视图,您可能会遇到错误消息

第xxx行的错误1227(42000):拒绝访问;您需要(至少一个)此操作的SUPER权限

显示的是因为mysqldump在创建视图中创建了一个definer语句(甚至你的root用户也没有足够的权限来设置它).如here所述,摆脱它们的唯一方法是过滤,我喜欢这样:

sed -i’s / ^ / .. 50013 DEFINER =.* SQL SECURITY DEFINER .. $/ – 删除安全定义语句/ g’

令人尴尬的是,需要大量的手工工作才能从RDS中获取数据库备份,并且还要重新进入.在任何情况下都不应该依赖RDS自动生成的备份,因为恶意攻击者可以轻松删除这些备份.获得了对您的AWS账户的访问权限.

相关文章
相关标签/搜索