当前位置:  开发笔记 > 编程语言 > 正文

MySQL导入数据库但忽略特定的表

如何解决《MySQL导入数据库但忽略特定的表》经验,为你挑选了2个好方法。

我有一个包含一个数据库和大约150个表的大型SQL文件.我想mysqlimport用来导入该数据库,但是,我希望导入过程忽略或跳过几个表.导入所有表的正确语法是什么,但忽略其中一些?谢谢.



1> Don..:

RandomSeed接受的答案可能需要很长时间!导入表(只是稍后删除)可能非常浪费,具体取决于大小.

对于使用创建的文件

mysqldump -u user -ppasswd --opt --routines DBname > DBdump.sql

我目前得到一个大约7GB的文件,其中6GB是日志表的数据,我不需要在那里; 重新加载此文件需要几个小时.如果我需要重新加载(为了开发目的,或者如果需要进行实时恢复),我将浏览文件:

sed '/INSERT INTO `TABLE_TO_SKIP`/d' DBdump.sql > reduced.sql

并重新加载:

mysql -u user -ppasswd DBname < reduced.sql

这给了我一个完整的数据库,创建了"不需要的"表但是空的.如果你真的不想要这些表,只需在加载完成后删除空表.

对于多个表,您可以执行以下操作:

sed '/INSERT INTO `TABLE1_TO_SKIP`/d' DBdump.sql | \
sed '/INSERT INTO `TABLE2_TO_SKIP`/d' | \
sed '/INSERT INTO `TABLE3_TO_SKIP`/d' > reduced.sql

有一个'gotcha' - 注意转储中可能包含"INSERT INTO TABLE_TO_SKIP"的过程.


考虑````sed -r```选项和一个RegExp,如果你想一次消除更多的表,比如:````sed -r'/ INSERT INTO`(TABLE1_TO_SKIP | TABLE2_TO_SKIP)`/ d'DBdump .sql> reduced.sql```
这是天才,1小时到30秒.
哇!!!真棒,我只是将备份从1GB减少到72MB,为我节省了很多时间,谢谢
比接受的答案更好,谢谢
只是FLY:`TABLE_TO_SKIP`区分大小写,通常是`table_to_skip` :)

2> RandomSeed..:

mysqlimport不是导入SQL语句的正确工具.此工具用于导入格式化的文本文件,例如CSV.您要做的是mysql使用如下命令将sql转储直接提供给客户端:

bash > mysql -D your_database < your_sql_dump.sql

既不提供您需要的功能mysql也不mysqlimport提供.你最好的机会是导入整个转储,然后丢弃你不想要的表.

如果您可以访问转储来自的服务器,那么您可以创建一个新的转储mysqldump --ignore-table=database.table_you_dont_want1 --ignore-table=database.table_you_dont_want2 ....


向下滚动以获得更好的选择

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有