前回に続いて、
内部テーブル
gh-ost実行中には内部でテーブルを作成します。実行終了時にはそれらは自動で削除されますが、
ここで、
_TABLENAME_
テーブルgho (例._sbtest1_ gho) - ゴーストテーブルです。カットオーバー後、
基テーブルの名前にリネームされます。 --initially-drop-ghost-table
オプションをTrueにした場合、開始時にそれが存在すると削除します。 _TABLENAME_
テーブルghc (例._sbtest1_ ghc) - 変更ログテーブルです。ステータス情報やレプリケーション遅延を検知するためのデータが格納されています。gh-ostでは
SHOW SLAVE STATUS
のseconds_
でレプリケーション遅延を判定していません。このテーブルに時刻を登録して独自に遅延を判定しています。そのため、behind_ master ms単位での判定が可能になっています。 _TABLENAME_
テーブルdel (例._sbtest1_ del) - カットオーバー後の基テーブルです。
--initially-drop-old-table
オプションをTrueにすると、開始時にそれが存在すると削除します。 --ok-to-drop-table
オプションをTrueにすると、実行終了後に削除します。
ステータス情報
標準出力されるログに、
各ステータスは以下のようになっています。
項目 | 表示例 | 内容 |
---|---|---|
Copy | Copy: 589300/ |
総行数の推定値のうち、 |
Applied | Applied: 2299; | バイナリログを処理して、 |
Backlog | Backlog: 50/ |
バイナリログのキュー |
Time | Time: 34s(total), 5s(copy); | 経過時間 |
streamer | streamer: mysql-bin. |
現在、 |
Lag | Lag: 0. |
レプリケーションラグ |
State | State: migrating | ステータス |
ETA | ETA: 3m31s | 予想終了時間 |
ステータス情報を取得する方法は、
- テーブル
_TABLENAME_
テーブルを問い合わせることで、ghc ステータス情報を取得できます。
- UNIXソケットファイルやTCP
- 詳しくは Interactive commands をご確認ください。
スロットル
スロットルとは、
さまざまな観点からスロットリングするオプションが存在します。
レプリケーション遅延
レプリケーション遅延を検知して、
- --max-lag-millis
- 単位はmsで指定した時間レプリケーションが遅延するとスロットリングが開始されます。デフォルトは1500msです。
--throttle-control-replicas
オプションを使って、遅延をチェックするレプリカを指定することもできます。
負荷
MySQLの負荷を検知して、
- --max-load
- コンマ区切りでMySQLのステータス名としきい値を設定し、
それを超えるとスロットリングが開始されます。デフォルトは指定なしです。 'Threads_
のようにカンマ区切りで複数の設定も可能です。running=100,Threads_ connected=500'
手動
スロットリングを開始、
- --throttle-flag-file string
- ファイルが存在するとスロットリングが開始されます。デフォルトは指定なしです。たとえば、
--throttle-flag-file=/tmp/
でgh-ostを実行した場合、manual_ throttle touch /tmp/
でスロットリング開始、manual_ throttle rm /tmp/
で終了となります。manual_ throttle
クエリ
任意のクエリを実行させて、
- --throttle-query string
- たとえば、
--throttle-query="select hour(now()) between 8 and 17"
とすると、スロットリングは午前8:00に自動開始し、 マイグレーションは午後18:00に自動再開されることになります。
最小限のオプションでgh-ostを実行しても、--max-load
と--throttle-flag-file
は指定したほうが良さそうです。
現在、State: throttled, lag=1.
のような表示の場合は、
カットオーバー
カットオーバーとは、
以下のようなSQLを内部で発行して、
いくつかオプションを紹介します。
- --cut-over-lock-timeout-seconds int
- カットオーバーの試行中にテーブルのロック取得に待機する秒数です。デフォルトは3秒です。
lock_
値と考えて大丈夫です。wait_ timeout - --postpone-cut-over-flag-file=string
- マイグレーション開始時に指定したファイルを作成します。それが存在する間、
マイグレーションはテーブルの入れ替えを延期し、 ゴーストテーブルの同期を継続します。カットオーバーはファイルが削除された瞬間に実行します。
カットオーバーのタイミングをすぐに実行しても良い場合は、--postpone-cut-over-flag-file
オプションを指定すると良いでしょう。
また、
マイグレーションの影響でエラーとなっているなら、
その後、
まとめ
今回はgh-ostの機能などについて紹介しました。pt-online-schema-changeではトリガーを使用しているため、
次回は注意点などについて紹介したいと思います。