我有一个很大的SQL文件,其中有一个数据库和大约150个表。我希望使用mysqlimport导入该数据库,但是,我希望导入过程忽略或跳过几个表。导入所有表,但忽略其中一些表的正确语法是什么?谢谢。
发布于 2013-05-24 20:53:17
mysqlimport不是用于导入SQL语句的正确工具。此工具用于导入格式化的文本文件,如CSV。您要做的是使用如下命令将您的sql dump直接提供给mysql客户机:
bash > mysql -D your_database < your_sql_dump.sqlmysql和mysqlimport都不能提供您需要的功能。最好的办法是导入整个转储文件,然后删除不需要的表。
如果您有权访问转储所在的服务器,则可以使用mysqldump --ignore-table=database.table_you_dont_want1 --ignore-table=database.table_you_dont_want2 ...创建一个新的转储。
发布于 2014-10-15 17:53:09
RandomSeed接受的答案可能需要很长时间!根据大小的不同,导入表(只是为了稍后删除它)可能非常浪费。
对于使用创建的文件
mysqldump -u user -ppasswd --opt --routines DBname > DBdump.sql我目前得到了一个大约7 6GB的文件,其中6 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这里有一个“陷阱”--注意转储中可能包含"INSERT INTO TABLE_TO_SKIP“的过程。
发布于 2018-08-23 16:06:34
对于使用.sql.gz文件的任何人,我发现以下解决方案非常有用。我们的数据库是25GB+,我必须删除日志表。
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
https://stackoverflow.com/questions/16735344
复制相似问题