インポートするSQLファイルがたくさんあります。単一ファイルの場合は、次のコマンドを使用します。
mysql -u root -p dbname < db.sql
xargsを使用してすべてのファイルを一括インポートできますか?それは次のとおりです。
ls *.sql | xargs ....
mysqlimportが解決策であることを知っていますが、xargsが可能かどうかを知りたいです。
答え1
xargs
入力をコマンドライン引数に変換するのに適しています。ただし、mysql
SQLスクリプトファイル名パラメータは許可されていないため、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ファイルをロードするための最良の方法だとは思わないが、ファイルを一括インポートする問題を満たしています。)