以前に筆者が担当した第168回に続いて,
MyDumper実行時の注意点
エクスポート用のmydumperコマンド
mydumperは開始時にFLUSH TABLE WITH READ LOCK
を実行して,--threads
オプションで指定したスレッドを生成し,START TRANSACTION WITH CONSISTENT SNAPSHOT
を実行します。その後,UNLOCK TABLES
にてロックの解除を行い,
そのため,FLUSH TABLE WITH READ LOCK
がロングクエリが終わるまで待機されます。そうすると,
mydumperを開始するときは,--long-query-guard
オプションを短い値に設定することで,
MyDumperのパラレル(並列)実行について
mydumperとmyloaderはともに並列で処理できます。どちらのコマンドも--threads
オプションにより並列度を設定します。mydumperによりダンプファイルが複数に分割され保存されます。その分割されたファイル単位でmyloaderが並列に実行する流れになります。
コマンドオプションにより並列実行の動作が異なるので,
mydumper
mydumperコマンドでは,--threads
オプションにて並列度を設定します。どのように並列実行が動作するかはオプションによって異なります。
--rows
オプション
単位は行数で,--rows 100000
と設定した場合は,
- 例
$ mydumper --host mysql-hostname1 --port 3306 --user mydumper --ask-password --database db1 --outputdir ./mydumper --verbose 3 --rows 100000 --threads 4 〈略〉 ** Message: 12:16:00.290: Thread 2 dumping data for `db1`.`t0` WHERE (`id` >= 611657 AND `id` < 917485) | Remaining jobs: -1 ** Message: 12:16:00.290: Thread 1 dumping data for `db1`.`t0` WHERE `id` IS NULL OR (`id` >= 1 AND `id` < 305829) | Remaining jobs: -1 ** Message: 12:16:00.290: Thread 4 dumping data for `db1`.`t0` WHERE (`id` >= 305829 AND `id` < 611657) | Remaining jobs: -1 〈略〉 $ ls -ltrh mydumper/*[0-9].sql -rw-r--r-- 1 root root 7.3M May 6 12:16 mydumper/db1.t0.00000.sql -rw-r--r-- 1 root root 7.4M May 6 12:16 mydumper/db1.t0.00001.sql -rw-r--r-- 1 root root 9.4M May 6 12:16 mydumper/db1.t0.00002.sql
ここではdb1
データベースには主キーがid
のt0
テーブルがあります。 --rows
オプションで指定した値とは誤差がありますが,id
を使って範囲検索にて取得しているのがわかります。
注意として,
--rows
オプションは,--threads
オプションで指定した並列度で動作します。このオプションのメリットとして,
デメリットとしては,
--chunk-filesize
オプション
単位はMBで,--chunk-filesize 2
と指定すると,
- 例
$ mydumper --host mysql-hostname1 --port 3306 --user mydumper --ask-password --database db1 --outputdir ./mydumper --verbose 3 --chunk-filesize 2 --threads 4 〈略〉 ** Message: 12:08:52.337: Thread 4 dumping data for `db1`.`t0` | Remaining jobs: -3 〈略〉 $ ls -ltrh mydumper/*[0-9].sql -rw-r--r-- 1 root root 2.9M May 6 12:08 db1.t0.00000.sql -rw-r--r-- 1 root root 2.9M May 6 12:08 db1.t0.00001.sql -rw-r--r-- 1 root root 2.9M May 6 12:08 db1.t0.00002.sql -rw-r--r-- 1 root root 2.9M May 6 12:08 db1.t0.00003.sql -rw-r--r-- 1 root root 2.9M May 6 12:08 db1.t0.00004.sql -rw-r--r-- 1 root root 2.9M May 6 12:08 db1.t0.00005.sql -rw-r--r-- 1 root root 2.9M May 6 12:08 db1.t0.00006.sql -rw-r--r-- 1 root root 2.9M May 6 12:08 db1.t0.00007.sql -rw-r--r-- 1 root root 1.1M May 6 12:08 db1.t0.00008.sql
--chunk-filesize
オプションの場合は,--threads
オプションで指定した並列度で動作します。
このオプションのメリットとしては,
--rows
と--chunk-filesize
オプションは片方のみ設定できます。両方指定した場合は--rows
が優先されます。
myloader
myloaderでは,--threads
オプションで指定した並列度はmydumperで出力したダンプファイル単位で実行されます。
その他
オプション
その他知っておくと良いオプションを紹介します。
--no-schemas
- テーブル定義などは含まずデータのみエクスポートします。
--no-data
- データは含まずテーブル定義のみエクスポートします。
--compress
- 出力するダンプファイルを圧縮します。デフォルトはOFFです。
--statement-size
- 作成するINSERT文の1つのサイズ
(バイト)。デフォルトは1000000です。 --events
,--triggers
,--routines
- それぞれイベント,
トリガーとストアドプロシージャを含めてエクスポートします。デフォルトではこれは取得されないので, 必須オプションといえます。
レプリケーション情報
mydumper完了時に,--outputdir
オプションに指定したディレクトリにmetadata
というファイルができます。そこに,SHOW SLAVE STATUS
とSHOW MASTER STATUS
の情報が出力されています。myloaderでリストアした先のMySQLをレプリカとして動作させたいときは,
まとめ
今回は主にMyDumperのオプションについて紹介しました。もし,