我在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)
我的心碎了。 :(
答案 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)。或者你可以删除所有触发器。