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
cat *.sql | mysql
?特定の順序でそれらが必要ですか?
この方法で処理するには多すぎる場合は、次のようなものを試してください:
find . -name '*.sql' | awk '{ print "source",$0 }' | mysql --batch
Linuxでのパイプライン処理に問題はないはずですが、これはスクリプト入力をパイプラインに渡す際の問題も回避します。このアプローチの良い点は、mysql
ユーティリティがstdin
から読み取るのではなく、各ファイルを読み取ることです。
すべてを読み込むワンライナー.sql
ファイルとインポート:
for SQL in *.sql; do DB=${SQL/\.sql/}; echo importing $DB; mysql $DB < $SQL; done
唯一のトリックは、.sql
データベース名を取得します。
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分かかりました。
私はこれを正確に行うためにスクリプトを作成しました。これを(完全に非創造的に)「myload」と呼びました。 SQLファイルをMySQLにロードします。
シンプルで簡単です。 mysql接続パラメーターを指定でき、gzipされたsqlファイルをその場で解凍します。データベースごとにファイルがあり、ファイル名のベースが目的のデータベース名であることを前提としています。
そう:
myload foo.sql bar.sql.gz
「foo」および「bar」と呼ばれる(存在しない場合)データベースを作成し、それぞれにsqlファイルをインポートします。
プロセスの反対側については、 このスクリプト(mydumpall) を作成しました。これは、各データベース(または名前または正規表現で指定されたサブセット)に対応するsql(またはsql.gz)ファイルを作成します。
Mysqldumpの構文は覚えていませんが、次のようになります
find . -name '*.sql'|xargs mysql ...