19

重複の可能性:
mysqlのダンプとインポートの高速化

mysqldumpかなり高速ですが、中規模のデータベース(20〜30メガバイト)のダンプは、を使用してロードするのに数分かかりますmysql my_database < my_dump_file.sql

ロードを高速化するために調整できるmysql設定はありますか?保存されたデータをロードするためのより良い方法はありますか?

CSVベースのダンプでmysqlimportユーティリティを使用して実験しました。これらの負荷はわずかに(ただし、それほどではありませんが)速くなります。生のデータベースファイルをコピーしたいのですが、それは悪い考えのようです。

4

6 に答える 6

30

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 のドキュメントにあります。

于 2011-12-01T18:11:13.923 に答える
6

maatkit - 並列ダンプ

maatkit - 並列復元

とても早い。

于 2009-07-12T23:16:24.060 に答える
5

--optダンプするときは、mysqldumpのオプションを使用していることを確認してください。これは、一括挿入構文、遅延キー更新などを使用します...


MyISAM テーブルのみを使用している場合は、サーバーを停止し、停止したサーバーにコピーしてから起動することで安全にコピーできます。

オリジン サーバーを停止したくない場合は、次の手順に従います。

  1. すべてのテーブルで読み取りロックを取得する
  2. すべてのテーブルをフラッシュする
  3. ファイルをコピーする
  4. テーブルのロックを解除

しかし、それらを配置するときは、コピー先サーバーを停止する必要があると確信しています。

于 2009-07-10T22:13:14.850 に答える
4

https://launchpad.net/mydumperを試してください - mysqldump http://vbtechsupport.com/1695/よりも 3 倍から 10 倍高速なマルチスレッド mysql バックアップ/復元

于 2012-01-07T02:54:40.253 に答える
3

データが正常であり、ファイルシステムやシステムパフォーマンスの問題がないことを確認しますか?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秒弱で終了します。

于 2009-07-12T19:53:04.110 に答える
1

バックアップと復元に LVM スナップショットを使用する方法がありますが、これは興味深いオプションです。

mysqldump を実行する代わりに、LVM を使用して MySQL データ ディレクトリのスナップショットを作成することを検討してください。LVM スナップショットを使用すると、ほぼリアルタイムのバックアップ機能、すべてのストレージ エンジンのサポート、および信じられないほど高速な復旧が可能になります。下記リンクより引用すると、

「リカバリ時間は、データを元に戻し、標準の MySQL クラッシュ リカバリと同じくらい速く、さらに短縮できます。」

http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/

于 2009-07-10T22:33:59.537 に答える