2016-05-15 5 views
0

特定のデータベースにインポートする大きなMySqlダンプがあるとしましょう。インポート中にMySQLダンプに `use`が含まれているときに警告を表示

私は

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

foo.mysqlはどこかuse foo;持って使用することができます。

このコマンドは、すでに私が欲しいもののほとんどをやっている:barよりも別のデータベースに重要であろう無視したデータを。

私は、データベースのダンプがuse文が含まれているかどうかを確認するためにgrep -e "^use " foo.mysqlを使用することができます。

しかし、私は、インポート時にも、これを行うことができますので、私は二回ダンプを読む必要はありませんか?

+0

'use'は有効なmysqlコマンドです。 'use'で参照されているデータベースが存在しないかぎり、警告は生成されません。 – Shadow

+0

@hakre例えば 'mysqldump --all-databases'などです。他の誰かからダンプを取って、私は彼らがそれをどのように作成したのかわからない。 – Alex

答えて

1

読書例をインポート中:

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

説明:彼らがでてくるように使用-文を印刷しながら

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

例では、MySQLにファイルdump.sqlをインポートしますあなたは、フルを持っている場合、MySQLサーバ(--all-databases長いオプション)のすべてのデータベースをダンプして、あなたは、MySQLにすべてのSQL USE -statements ながら、ファイルパイプを確認したいと思いますあなたはラインがUSE -statementであれば、それらの重複行から印刷するだけの場でコンテンツやsedを複製するteeを利用することができます。

フィルタリングされていない出力は、のMySQLによって正常としてインポートすることができながら、フィルタリングされた出力は、レビューのためSTDERRにリダイレクトされます。

こちらがお役に立てば幸いです。

関連する問題