首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL导入数据库,但忽略特定表

问MySQL导入数据库,但忽略特定表
EN

Stack Overflow用户
提问于 2013-05-24 20:48:16
回答 8查看 67.3K关注 0票数 50

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-05-24 20:53:17

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

代码语言:javascript
复制
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 ...创建一个新的转储。

票数 12
EN

Stack Overflow用户

发布于 2014-10-15 17:53:09

RandomSeed接受的答案可能需要很长时间!根据大小的不同,导入表(只是为了稍后删除它)可能非常浪费。

对于使用创建的文件

代码语言:javascript
复制
mysqldump -u user -ppasswd --opt --routines DBname > DBdump.sql

我目前得到了一个大约7 6GB的文件,其中6 6GB是我不需要的日志表的数据;重新加载这个文件需要几个小时。如果我需要重新加载(出于开发目的,或者需要进行实时恢复),我会浏览文件,如下所示:

代码语言:javascript
复制
sed '/INSERT INTO `TABLE_TO_SKIP`/d' DBdump.sql > reduced.sql

并使用以下命令重新加载:

代码语言:javascript
复制
mysql -u user -ppasswd DBname < reduced.sql

这给了我一个完整的数据库,其中创建了一个“不需要的”表,但它是空的。如果您真的根本不需要这些表,只需在加载完成后删除空表即可。

对于多个表,您可以这样做:

代码语言:javascript
复制
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

这里有一个“陷阱”--注意转储中可能包含"INSERT INTO TABLE_TO_SKIP“的过程。

票数 148
EN

Stack Overflow用户

发布于 2018-08-23 16:06:34

对于使用.sql.gz文件的任何人,我发现以下解决方案非常有用。我们的数据库是25GB+,我必须删除日志表。

代码语言:javascript
复制
gzip -cd "./mydb.sql.gz" | sed -r '/INSERT INTO `(log_table_1|log_table_2|log_table_3|log_table_4)`/d' | gzip > "./mydb2.sql.gz"

感谢唐的回答和Xosofox的评论以及这篇相关文章:Use zcat and sed or awk to edit compressed .gz text file

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16735344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档