当MySQL转储包含`use`时,在导入期间显示警告

时间:2016-05-15 10:47:22

标签: mysql bash

假设我有一个大的MySql转储,我想导入到特定的数据库。

我可以用

mysql -D bar --one-database < foo.mysql

foo.mysql在某个地方有一个use foo;

此命令已经完成了我想要的大部分操作:忽略对bar以外的其他数据库很重要的数据。

我可以使用grep -e "^use " foo.mysql来检查数据库转储是否包含use语句。

但是我可以在导入期间执行此操作,因此我不必两次读取转储吗?

1 个答案:

答案 0 :(得分:1)

导入示例时读取:

< dump.sql tee >(sed -n '/^USE `[^`]*`;$/ p' 1>&2) | mysql ...

该示例将文件dump.sql导入到mysql中,同时打印出来的use-statements:

...
USE `blue-racoon`;
USE `funny-basil`;
USE `purple-fish`;
...

说明:如果您有一个包含mysql服务器的所有数据库的完整转储(--all-databases长选项),并且您希望在时查看所有SQL USE - 语句文件管道进入mysql,你可以利用 tee 动态复制内容, sed 只能从那些重复的行打印如果一行是USE - 陈述。

然后将过滤后的输出重定向到 STDERR 进行查看,而未经过滤的输出可以通过 mysql 正常导入。

我希望这会有所帮助。