假设我有一个大型的MySql转储,我想将它导入到一个特定的数据库中。
我可以用
mysql -D bar --one-database < foo.mysql
foo.mysql在某个地方有一个use foo;。
这个命令已经完成了我想做的大部分工作:忽略数据,这对其他数据库来说比bar更重要。
我可以使用grep -e "^use " foo.mysql来检查数据库转储是否包含use语句。
但是,我也可以在导入过程中这样做,这样我就不必读两次转储了?
发布于 2016-05-15 15:40:41
导入示例时阅读:
< dump.sql tee >(sed -n '/^USE `[^`]*`;$/ p' 1>&2) | mysql ...该示例将将文件dump.sql导入mysql,同时打印use-语句:
...
USE `blue-racoon`;
USE `funny-basil`;
USE `purple-fish`;
...说明:如果您有一个包含mysql服务器的所有数据库的完整转储(--all-databases long选项),并且希望在文件排入mysql时检查所有SQL USE-statements,则可以使用tee动态复制内容,如果一行是USE-statement,则sed只能从重复的行中打印。
然后将过滤后的输出重定向到STDERR进行检查,而未过滤的输出则可以由mysql如常导入。
我希望这能帮到你。
https://stackoverflow.com/questions/37237310
复制相似问题