恢复MySQL数据库时,“无法在系统表上创建触发器”错误

时间:2016-05-12 21:33:30

标签: mysql

我在AWS上安装了一个大型数据库几个月,但由于它开始变得昂贵而将其删除了。

现在,我的硬盘上只有一个32GB的文件,我在关闭运行在实例上的MySQL数据库之前导出了该文件。

我想在笔记本电脑上导入400万行左右的本地MySQL。

使用MySQL Workbench,我试图做到这一点。但首先,我在本地重新创建了完全相同的模式(只有3个表)。然后,使用数据导入选项,我选择“从自包含文件导入”,并指向我的文件。我让它撕裂 - 只是为了收到这个令人沮丧的消息作为回应:

01:56:30 PM Restoring /home/monica/dumps/Dump20160406.sql
Running: mysql --defaults-file="/tmp/tmpMJpTQj/extraparams.cnf"  --protocol=tcp --host=127.0.0.1 --user=root --port=3306 --default-character-set=utf8 --comments --database=my_db  < "/home/monica/dumps/Dump20160406.sql"
ERROR 1465 (HY000) at line 488: Triggers can not be created on system tables  
Operation failed with exitcode 1

看起来触发器存在一些问题?首先,我有点困惑,因为我的数据库从来没有任何触发器开始。

要进行故障排除,我找到了his SO question,我尝试了这个建议 - 我编辑了my.conf文件,但它没有任何区别。

其他搜索让我空白。我找不到这个错误真的没什么。

如果有人有任何建议,那就太棒了。谢谢。

编辑

我在@Solarflare的评论中使用了一些建议并使用了这句话:

mysql -u root -p for_import -o < /home/monica/dumps/Dump20160406.sql

实际上,我发现了一个名为Pipe Viewer的酷工具,它提供了一个进度条 - 视觉证明(我希望)实际上发生了一些事情。所以我重写了这一行:

pv /home/monica/dumps/Dump20160406.sql | mysql -u root -p -o for_import

果然,看起来事情正在发挥作用,大约5分钟后,导入完成了:

34.1GB 0:08:19 [69.9MB / s] [================================= =&gt;] 100%

尼斯! HOWEVER:当我show databases然后use for_import然后show tables时,我得到:

Empty set (0.00 sec)我的心碎了。 :(

3 个答案:

答案 0 :(得分:6)

您可以使用参数-o--one-database跳过对您要导入的默认数据库无意义的所有内容:

mysql -u root -p -D mydb -o < /home/monica/dumps/Dump20160406.sql

将从您的文件中导入数据库mydb并跳过所有其他数据库,尤其是导致您遇到麻烦的系统数据库。名称mydb必须与您的文件和数据库中的名称相同。

答案 1 :(得分:2)

另一种选择是使用mysql -f导入以忽略并跳过失败的定义。

答案 2 :(得分:0)

我认为您的转储可以在系统表上有触发器,就像错误文本所说的那样。打开SQL转储(使用任何文本编辑器)并删除与系统数据库有关的所有内容(mysql,perfomance_schema,information_schema)。或者你可以删除所有触发器。