web-dev-qa-db-ja.com

mysqldumpインポートの高速化に役立つMySQL設定

最近、7 GbのMySQLダンプファイルをMySQL 5.6サーバーにインポートする必要がありました。 1 GBのRAMを搭載したモノコアCPUでは、インポートに約7時間かかりました。

他の誰かが、とりわけ次の設定を持つMySQLサーバーでインポートをテストしました。

innodb_buffer_pool_size = 8G
query_cache_size = 300M

私はこれらの設定の関連性について少し懐疑的です(そうです、そうです そのような大きなクエリキャッシュを設定することは悪いことです )。それは違いを生むでしょうか?これらの設定はデータベースのクエリ時にのみ使用されるため、インポートには関係ありませんか?

はいの場合、大きなダンプファイルのインポートを高速化するためにどの設定を行う必要がありますか?

公式ドキュメント によると、これらの値は一時的に設定する必要があります:

unique_checks = 0
foreign_key_checks = 0

私は読んだ ここ も設定する必要がある

innodb_flush_log_at_trx_commit = 2

しかし、mysqldumpコマンド(--optオプション)では、自動コミットモード(挿入ごとにログをディスクにフラッシュする)がデフォルトですでに無効になっているため、役に立たないと思います。

5
dr_

提案#1

unique_checks = 0およびforeign_key_checks = 0を実行する必要はありません。私の3年前の投稿を参照してください mysqldump/reload の高速化(ASPECT#2はmysqldumpの標準ヘッダーを示しています。13行目と14行目は無効化を処理していますそれらのチェックのうち)

提案#2

InnoDBアーキテクチャに注意してください(Percona CTO Vadim Tkachenkoからの画像)

InnoDB Plumbing

MySQLインスタンスをリロードする場合は、一時的に二重書き込みバッファを無効にする必要があります。

ステップ1

ターゲットサーバーにログインして実行します

SET GLOBAL innodb_fast_shutdown = 0;

ステップ2

innodb_doublewriteをOFFに設定してmysqldを再起動します

service mysql restart --innodb-doublewrite=OFF --innodb-fast-shutdown=0

ステップ#3

Mysqldumpをターゲットサーバーにロードする

ステップ4

Mysqldを通常どおり再起動します(二重書き込みバッファーが再び有効になります)

service mysql restart

「二重書き込みバッファ」という名前は2つの書き込みを意味するため、InnoDBはデータとインデックスのみをテーブルファイルに直接書き込み、ibdata1内の二重書き込みバッファへの書き込みをバイパスします。多分これはインポート時間を2倍にするでしょう(しゃれた意図)

提案#3

デフォルト innodb_log_buffer_sizeは8M です。より大きなログバッファが必要です。

この行を[mysqld]グループヘッダーの下のmy.cnfに追加してください

[mysqld]
innodb_log_buffer_size = 128M

次に、mysqldumpをリロードする前にmysqldを再起動します。

試してみる !!!

6
RolandoMySQLDBA