0

非常に大きな sql ファイルをテスト db サーバーにインポートしたいのですが、ファイルは約 50GB です。問題はmysql -uuser -p < sqlfile.sql、ファイルの読み込み時間自体が原因で、非常に長い時間がかかることです。

したがって、ファイルを100MB程度の非常に小さなチャンクに分割したいと思いますsplit -bytes=100Mが、問題は、分割がSQLステートメントに合わせられないことです(ファイル境界にまたがる挿入ステートメントが壊れています)。

私の質問は、コマンドラインで複数のファイルをストリーミングする方法はありますか? 何かのようなもの

mysql -user -p <1.sql < 2.sql < 3.sqlなどなど、それが可能であれば、ディレクトリ内のすべてのファイルに対して使用xargsしてforループするシェルスクリプトを実行できますか?

編集: ファイルを分割しようとする私の試みは、この投稿、How to import LARGE sql files into mysql tableによって管理されています。問題は私のものと同じようです。さて、テスト サーバーは 8 GB、Xeon Quadcore で、20 コア 144 GB の別のサーバーで同じことを試しましたが、11 時間のランタイムで問題なく終了しました (多くの CPU/RAM を集中的に使用するジョブが進行中の共有サーバー... )。テストサーバー、プロセスはまだ完了していません。したがって、RAM + ファイルの読み込みのオーバーヘッドだと思います。私が間違っている場合は修正してください。

4

1 に答える 1

0

問題はmysql -uuser -p < sqlfile.sql、ファイルの読み込み時間自体が原因で、非常に長い時間がかかることです。

そのようなファイルをリダイレクトする場合、「読み込み時間」はありません。MySQL は好きなだけファイルを読み取ることができます。オーバーヘッドはありません。ファイルを分割しても、速度は向上しません。これは可能な限り高速です。

私の質問は、コマンドラインで複数のファイルをストリーミングする方法はありますか?

ファイルを 1 つの大きな断片に残すよりも遅くなりますが、本当にやりたい場合は次のようにします。

cat 1.sql 2.sql 3.sql | mysql -uuser -p

または、各ファイルに対して個別に mysql を実行することもできます。

for file in *.sql; do mysql -uuser -p < "$file"; done
于 2013-02-15T06:21:46.187 に答える