最近、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
オプション)では、自動コミットモード(挿入ごとにログをディスクにフラッシュする)がデフォルトですでに無効になっているため、役に立たないと思います。
unique_checks = 0
およびforeign_key_checks = 0
を実行する必要はありません。私の3年前の投稿を参照してください mysqldump/reload の高速化(ASPECT#2はmysqldumpの標準ヘッダーを示しています。13行目と14行目は無効化を処理していますそれらのチェックのうち)
InnoDBアーキテクチャに注意してください(Percona CTO Vadim Tkachenkoからの画像)
MySQLインスタンスをリロードする場合は、一時的に二重書き込みバッファを無効にする必要があります。
ターゲットサーバーにログインして実行します
SET GLOBAL innodb_fast_shutdown = 0;
innodb_doublewriteをOFFに設定してmysqldを再起動します
service mysql restart --innodb-doublewrite=OFF --innodb-fast-shutdown=0
Mysqldumpをターゲットサーバーにロードする
Mysqldを通常どおり再起動します(二重書き込みバッファーが再び有効になります)
service mysql restart
「二重書き込みバッファ」という名前は2つの書き込みを意味するため、InnoDBはデータとインデックスのみをテーブルファイルに直接書き込み、ibdata1
内の二重書き込みバッファへの書き込みをバイパスします。多分これはインポート時間を2倍にするでしょう(しゃれた意図)
デフォルト innodb_log_buffer_sizeは8M です。より大きなログバッファが必要です。
この行を[mysqld]
グループヘッダーの下のmy.cnfに追加してください
[mysqld]
innodb_log_buffer_size = 128M
次に、mysqldumpをリロードする前にmysqldを再起動します。