我有一个包含一个数据库和大约150个表的大型SQL文件.我想mysqlimport
用来导入该数据库,但是,我希望导入过程忽略或跳过几个表.导入所有表的正确语法是什么,但忽略其中一些?谢谢.
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"的过程.
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 ...
.
向下滚动以获得更好的选择