重複の可能性:
mysqlのダンプとインポートの高速化
mysqldump
はかなり高速ですが、中規模のデータベース(20〜30メガバイト)のダンプは、mysql my_database < my_dump_file.sql
を使用してロードするのに数分かかります
ロードを高速化するために調整できるmysql設定はありますか?保存されたデータをロードするためのより良い方法はありますか?
CSVベースのダンプでmysqlimportユーティリティを使用して実験しました。これらの負荷はわずかに(ただし、それほどではありませんが)速くなります。生のデータベースファイルをコピーしたいのですが、それは悪い考えのようです。
InnoDBを使用していると仮定します...
妥当な時間内にインポートしたい既存のmysqldump出力ファイルが山積みになっている状況にありました。テーブル(ファイルごとに1つ)は約500MBで、それぞれ約5,000,000行のデータが含まれていました。次のパラメータを使用して、挿入時間を32分から3分未満に短縮することができました。
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT
また、適度に大きなinnodb_buffer_pool_size
設定が必要になります。
挿入は1回限りだったので、後で設定を元に戻しました。それらを長期間使用し続ける場合は、それらが何をしているのかを確認してください。
Cedric Nillyのブログ でこれらの設定を使用する提案を見つけました。各設定の詳細な説明は MySQLドキュメント にあります。
ダンプするときは、mysqldumpに--opt
オプションを使用していることを確認してください。これは、一括挿入構文、遅延キー更新などを使用します...
MyISAMテーブルのみを使用している場合サーバーを停止し、停止したサーバーにコピーして起動することで、安全にコピーできます。
Originサーバーを停止したくない場合は、次の手順を実行できます。
ただし、コピー先サーバーを配置するときは、サーバーを停止する必要があると確信しています。
データが正常であり、ファイルシステムやシステムパフォーマンスの問題がないことを確認しますか? 20〜30メガのデータベースの場合、数分は長い時間です。私は2GBのRAM、320GBのHD、そして標準の2.1GHzプロセッサを搭載したMacBookを使用しています。簡単なベンチマークのためにデータベースの1つを取得しました。
gavinlaking$ du -sm 2009-07-12.glis
74 2009-07-12.glis
gavinlaking$ mysql -pxxx -e "drop database glis"
gavinlaking$ mysql -pxxx -e "create database glis"
gavinlaking$ time mysql -pxxx glis < 2009-07-12.glis
real 0m17.009s
user 0m2.021s
sys 0m0.301s
74メガバイトのファイルの場合は17秒。それは私にはかなりきびきびしているようです。それが4倍大きかったとしても(300メガバイトの恥ずかしがり屋になります)、70秒弱で終了します。
試してみてください https://launchpad.net/mydumper -mysqldumpの3倍から10倍高速なマルチスレッドmysqlバックアップ/復元 http://vbtechsupport.com/1695/
バックアップと復元にLVMスナップショットを使用する方法があります。これは興味深いオプションです。
Mysqldumpを実行する代わりに、LVMを使用してMySQLデータディレクトリのスナップショットを作成することを検討してください。 LVMスナップショットを使用すると、ほぼリアルタイムのバックアップ機能、すべてのストレージエンジンのサポート、および信じられないほど高速なリカバリが可能になります。以下のリンクから引用するには、
「回復時間は、データを元に戻し、標準のMySQLクラッシュ回復と同じくらい速く、さらに短縮することができます。」
http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/