web-dev-qa-db-ja.com

複数の.sqlダンプファイルをシェルからmysqlデータベースにインポートします

Mysqlがサーバー上の各データベースのダンプする.sqlファイルの束を含むディレクトリがあります。

例えば.

database1-2011-01-15.sql
database2-2011-01-15.sql
...

それらの多くは実際にあります。

おそらく各データベースをインポートするシェルスクリプトまたは単一行を作成する必要があります。

Linux Debianマシンで実行しています。

Lsの結果をfindコマンドなどにパイプする方法があると思います。

どんな助けと教育も大歓迎です。

[〜#〜] edit [〜#〜]

したがって、最終的には、一度に1つのファイルをデータベースに自動的にインポートしたいと思います。

例えば。私が手動でそれをした場合、それは次のようになります:

mysql -u root -ppassword < database1-2011-01-15.sql
39
Derek Organ

cat *.sql | mysql?特定の順序でそれらが必要ですか?

この方法で処理するには多すぎる場合は、次のようなものを試してください:

find . -name '*.sql' | awk '{ print "source",$0 }' | mysql --batch

Linuxでのパイプライン処理に問題はないはずですが、これはスクリプト入力をパイプラインに渡す際の問題も回避します。このアプローチの良い点は、mysqlユーティリティがstdinから読み取るのではなく、各ファイルを読み取ることです。

75
D.Shawley

すべてを読み込むワンライナー.sqlファイルとインポート:

for SQL in *.sql; do DB=${SQL/\.sql/}; echo importing $DB; mysql $DB < $SQL; done

唯一のトリックは、.sqlデータベース名を取得します。

17
Ronnie

http://kedar.nitty-witty.com/blog/mydumpsplitter-extract-tables-from-mysql-dump-Shell-script に素晴らしい小さなスクリプトがあります。これはhugemysqldumpファイルをテーブルごとに1つのファイルに分割します。次に、この非常に単純なスクリプトを実行して、これらのファイルからデータベースをロードできます。

for i in *.sql
do
  echo "file=$i"
  mysql -u admin_privileged_user --password=whatever your_database_here < $i
done

mydumpsplitterは.gzファイルでも動作しますが、最初にガンジしてから非圧縮ファイルで実行するよりもはるかに遅くなります。

私はhugeと言いますが、すべては相対的だと思います。 2000テーブル、200 MBのダンプファイルを分割するのに約6〜8分かかりました。

8
jshirey-ncusa

私はこれを正確に行うためにスクリプトを作成しました。これを(完全に非創造的に)「myload」と呼びました。 SQLファイルをMySQLにロードします。

ここはGitHubにあります

シンプルで簡単です。 mysql接続パラメーターを指定でき、gzipされたsqlファイルをその場で解凍します。データベースごとにファイルがあり、ファイル名のベースが目的のデータベース名であることを前提としています。

そう:

myload foo.sql bar.sql.gz

「foo」および「bar」と呼ばれる(存在しない場合)データベースを作成し、それぞれにsqlファイルをインポートします。

プロセスの反対側については、 このスクリプト(mydumpall) を作成しました。これは、各データベース(または名前または正規表現で指定されたサブセット)に対応するsql(またはsql.gz)ファイルを作成します。

3
tylerl

Mysqldumpの構文は覚えていませんが、次のようになります

 find . -name '*.sql'|xargs mysql ...
3
Navi