
[英] ERROR 1465 "Triggers can not be created on system tables" after restore from SQL created by mysqldump
查看:1229 发布时间:2020/5/15 5:11:46 mysql mysqldump rds
仅需 5 分钟,数据变图表。众多数据可视化大屏模板等你来选。开源,人人可用。
广告
本文介绍了错误1465“无法在系统表上创建触发器".从mysqldump创建的SQL还原后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在Amazon 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"永远无法工作,那么它首先是什么呢?还是我使用错了?
推荐答案
在与Amazon支持小组进行了较长的交谈之后,这是我想出的:
可以通过将mysql配置临时设置为log_bin_trust_function_creators设置为1来解决触发问题
他们不建议拍摄完整快照,而是选择单个数据库.
这意味着您必须在恢复中执行两个步骤:
创建架构
创建用户并授予他们必要的权限
导入转储的数据
使用视图,您可能会遇到错误消息
With views, you might run into the error message
第12行的错误1227(42000):访问被拒绝;您需要(至少其中一种)SUPER权限才能进行此 *** 作
之所以显示它,是因为mysqldump在create视图中创建了一个definer语句(甚至您的root用户也没有足够的权限来设置该语句).如此处所述,摆脱它们的唯一方法是过滤,即过滤我喜欢这样:
sed -i's/^/.. 50013 DEFINER =.* SQL安全定义器.. $/-删除了安全定义器语句/g'
令人尴尬,需要大量的手动工作才能从RDS中取出数据库备份,然后又将其恢复.在任何情况下,您都应该依靠备份来进行备份只能由RDS自动制作,因为那些可以访问您的AWS帐户的恶意攻击者可以轻松删除它们.
这篇关于错误1465“无法在系统表上创建触发器".从mysqldump创建的SQL还原后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
可以使用QT自带的数据库完成 *** 作,以下是参考代码:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE") //添加数据库
db.setDatabaseName("note.db") //创建一个note.db的文件存储数据
db.open() //开启数据库
query = QSqlQuery(db) //获得访问数据库的query
query.exec(XXX) //执行指令(XXX为SQL指令)
db.close() //关闭数据库
一般而言会将db变量作为全局变量或者数据成员,当需要访问的时候就获取一个query就可以了。
要实现所提到的功能,要好好看看QString、QStringList,这两玩意主要是临时存放数据、分割数据等作用,另外,要看QFile、QDir、QFileInfo、QTextStream,这四个主要用来读取文本数据。看看QVector或者QList等来存放读出来的数据。
另外,要实现这玩意,SQL的语句不要求精通,但是基本的Create、Insert、Select、Delete等 *** 作要准确无误。否则出错了QT是看不出来的。QT不会检测SQL的准确性的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)