0

数千万のレコードを持つテーブルを持つ MySQL データベースはINSERT INTO、次の場合に大きなステートメントを取得するようです。

mysqldump some_db > some_db.sql

データベースをバックアップするために実行されます。(すべてのレコードを処理するのは 1 つの挿入ステートメントですか?)

したがって、使用してDBを再構築するとき

mysql some_db < some_db.sql

その場合、CPU はほとんどビジーではなく (mysql プロセスによる使用率は約 1.8% です... mysqld も表示されませんか?)、ハードディスクもビジー状態ではないようです ...

前回は、復元プロセス全体で 5 時間かかりました。速くする方法はありますか?たとえば、DB を復元するときに行を解析する必要がないように、ステートメントをより短いステートメントに分割mysqldumpできますか?INSERTmysql

4

1 に答える 1

2

時間を使用しているものがあるとすれば、それは mysqld であり、実際にすべての作業を行っているのは mysqld です。リモートの mysql サーバーに接続している場合、mysqld はローカルのマシンではなく、そのマシン上にあります。

高速化する最も直接的な方法は、テーブルからすべてのキーとインデックスを削除し、データがロードされたらそれらを作成することです。多くの挿入にわたってすべてを更新し続けることは、サーバーに非常に負担をかける可能性があり、おそらく断片化されたインデックスになってしまう可能性があります. 挿入の最後のインデックス作成にはしばらく時間がかかることが予想されますが、挿入が行われているときにすべてを最新の状態に保つことほど悪くはありません。

より良い解決策は、そのテーブルでの mysqldump の使用を停止し、 (ダンプを作成するためLOAD DATA INFILEのマッチングを使用して) 使用に切り替えることです。SELECT ... INTO OUTFILE

絶対に最善の策は、バックアップと復元を試みるのではなく、データベース ファイルをコピーすることです。これはまだ MyISAM データベースでのみ機能し、InnoDB では機能しないと思いますが、最近状況が変わった場合は他の誰かが私を修正できます。

于 2010-06-09T02:16:13.743 に答える