假设我有一个大的MySql转储,我想导入到特定的数据库。
我可以用
mysql -D bar --one-database < foo.mysql
foo.mysql
在某个地方有一个use foo;
。
此命令已经完成了我想要的大部分操作:忽略对bar
以外的其他数据库很重要的数据。
我可以使用grep -e "^use " foo.mysql
来检查数据库转储是否包含use语句。
但是我可以在导入期间执行此操作,因此我不必两次读取转储吗?
答案 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 正常导入。
我希望这会有所帮助。