Dan*_*ard 38 mysql mysqldump mysqlimport
我有一个包含一个数据库和大约150个表的大型SQL文件.我想mysqlimport
用来导入该数据库,但是,我希望导入过程忽略或跳过几个表.导入所有表的正确语法是什么,但忽略其中一些?谢谢.
Don*_*Don 120
RandomSeed接受的答案可能需要很长时间!导入表(只是稍后删除)可能非常浪费,具体取决于大小.
对于使用创建的文件
mysqldump -u user -ppasswd --opt --routines DBname > DBdump.sql
Run Code Online (Sandbox Code Playgroud)
我目前得到一个大约7GB的文件,其中6GB是日志表的数据,我不需要在那里; 重新加载此文件需要几个小时.如果我需要重新加载(为了开发目的,或者如果需要进行实时恢复),我将浏览文件:
sed '/INSERT INTO `TABLE_TO_SKIP`/d' DBdump.sql > reduced.sql
Run Code Online (Sandbox Code Playgroud)
并重新加载:
mysql -u user -ppasswd DBname < reduced.sql
Run Code Online (Sandbox Code Playgroud)
这给了我一个完整的数据库,创建了"不需要的"表但是空的.如果你真的不想要这些表,只需在加载完成后删除空表.
对于多个表,您可以执行以下操作:
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
Run Code Online (Sandbox Code Playgroud)
有一个'gotcha' - 注意转储中可能包含"INSERT INTO TABLE_TO_SKIP"的过程.
Ran*_*eed 10
mysqlimport
不是导入SQL语句的正确工具.此工具用于导入格式化的文本文件,例如CSV.您要做的是mysql
使用如下命令将sql转储直接提供给客户端:
bash > mysql -D your_database < your_sql_dump.sql
Run Code Online (Sandbox Code Playgroud)
既不提供您需要的功能mysql
也不mysqlimport
提供.你最好的机会是导入整个转储,然后丢弃你不想要的表.
如果您可以访问转储来自的服务器,那么您可以创建一个新的转储mysqldump --ignore-table=database.table_you_dont_want1 --ignore-table=database.table_you_dont_want2 ...
.
fes*_*skr 10
对于任何使用 .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"
Run Code Online (Sandbox Code Playgroud)
感谢 Don 的回答和 Xosofox 的评论以及这篇相关帖子: 使用 zcat 和 sed 或 awk 编辑压缩的 .gz 文本文件
有点老了,但我想它仍然会派上用场......
我喜欢@Don的回答(/sf/answers/1846566221/),但发现它非常烦人,你必须先写入另一个文件......
在我的特殊情况下,这会花费太多时间并且椎间盘空间
所以我写了一个小 bash 脚本:
#!/bin/bash
tables=(table1_to_skip table2_to_skip ... tableN_to_skip)
tableString=$(printf "|%s" "${tables[@]}")
trimmed=${tableString:1}
grepExp="INSERT INTO \`($trimmed)\`"
zcat $1 | grep -vE "$grepExp" | mysql -uroot -p
Run Code Online (Sandbox Code Playgroud)
这不会生成新的 sql 脚本,而是将其直接通过管道传输到数据库
,它确实创建表,只是不导入数据(这是我在处理巨大日志表时遇到的问题)
归档时间: |
|
查看次数: |
46559 次 |
最近记录: |