xargsを使用してSQLファイルをインポートする

xargsを使用してSQLファイルをインポートする

インポートするSQLファイルがたくさんあります。単一ファイルの場合は、次のコマンドを使用します。

mysql -u root -p dbname < db.sql

xargsを使用してすべてのファイルを一括インポートできますか?それは次のとおりです。 ls *.sql | xargs ....

mysqlimportが解決策であることを知っていますが、xargsが可能かどうかを知りたいです。

答え1

xargs入力をコマンドライン引数に変換するのに適しています。ただし、mysqlSQLスクリプトファイル名パラメータは許可されていないため、xargsこの場合は便利ではありません。

これは便利に使用されますcat

cat *.sql | mysql -u root -p dbname

それにもかかわらず、この方法を使用しようとするとls有名な結果がもたらされます。ls(1) の出力を分析しない理由記事。

答え2

SQLファイルが互いに独立している場合、並列にインポートする方が高速になる可能性があります。

parallel -j10 sql mysql://root:passwd@/dbname '<' {} ::: *.sql

詳しくは、GNU Parallelの紹介ビデオをご覧ください。https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

答え3

このコマンドは現在のフォルダ内のすべてのSQLファイルをロードし、8つのタスクを並列に実行し、ロードが成功すると各ファイルを削除します。

find . -type f -name "*.sql" -print0 | xargs -0 -n1 -P8 sh -c 'cat $0 | mysql -A -u<redacted> -p<redacted> -h<redacted> dbname && rm $0'

xargs(これはSQLファイルをロードするための最良の方法だとは思わないが、ファイルを一括インポートする問題を満たしています。)

関連情報