web-dev-qa-db-ja.com

mysqlのダンプとインポートの高速化

MySQLのダンプとインポートを高速化するための文書化されたテクニックはありますか?

これには、my.cnf設定、ramdisksの使用などが含まれます。

文書化されたテクニックのみを探し、できれば高速化の可能性を示すベンチマークを探します。

51
deadprogrammer

http://www.maatkit.org/ にはmk-parallel-dumpとmk-parallel-restoreがあります

マルチスレッドmysqldumpを希望しているなら、これ以上は望みません。このツールは、MySQLテーブルを並行してダンプします。 mysqldumpのラッパーとして(賢明なデフォルトの動作で)、またはSELECT INTO OUTFILEのラッパーとして機能する、はるかにスマートなmysqldumpです。速度が重要な非常に大きなデータサイズの高性能アプリケーション向けに設計されています。複数のCPUとディスクを活用して、データをより速くダンプします。

Mysqldumpには、ダンプのインポート中にインデックスを作成しないなど、さまざまな潜在的なオプションがありますが、完了時にそれらをまとめて実行します。

15
Alister Bulman
  1. High Performance MySQLのコピーを取得します。素晴らしい本。
  2. ダンプへの拡張挿入
  3. --tab形式でダンプして、mysqlimportを使用できるようにします。これは、mysql <dumpfileよりも高速です。
  4. 各テーブルに1つずつ、複数のスレッドでインポートします。
  5. 可能であれば、別のデータベースエンジンを使用してください。 innodbのような重いトランザクションエンジンへのインポートは非​​常に遅くなります。 MyISAMのような非トランザクションエンジンへの挿入は、はるかに高速です。
  6. Maakitツールキットのテーブル比較スクリプトを見て、ダンプしてインポートするのではなく、テーブルを更新できるかどうかを確認してください。しかし、おそらくバックアップ/復元について話しているのでしょう。
24
JBB

InnoDBにインポートする場合、できる最も効果的なことは、

innodb_flush_log_at_trx_commit = 2

インポートの実行中に一時的にmy.cnfで。 ACIDが必要な場合は、1に戻すことができます。

13

あなたの質問は、ボトルネックがどこにあるかにも依存すると思います。

  • ネットワークがボトルネックになっている場合は、-C/--compressフラグをmysqldumpに。
  • コンピュータのメモリが不足している(スワップを開始している)場合は、メモリを追加購入する必要があります。

また、--quickmysqldumpのフラグ(および--disable-keys MyIsamを使用している場合)。

5
Ztyx

ダンプで拡張挿入を使用すると、インポートが高速になります。

4
che

外部キーチェックをオフにし、自動コミットをオンにします。

4
longneck

MyIsamテーブルしかない場合は、mysqlhotcopyが代わりになるかもしれません。

1
Ztyx