|
128 | 128 | ```
|
129 | 129 |
|
130 | 130 | - コマンドが正常に終了したか、確認するために、`SHOW SLAVE STATUS`を入力する
|
131 |
| - - `Slave_IO_Running`および`Slave_SQL_Running`が**Yes**になっていることを確認する |
| 131 | + - `Slave_IO_Running`および`Slave_SQL_Running`が**Yes**になっていることを確認する |
| 132 | + |
| 133 | +## 2-3 GTIDの進化 |
| 134 | +- バイナリログに記録される個々のトランザクションに、世界で固有のIDをつけるという機能 |
| 135 | +- これによって、レプリケーションしたスレーブサーバーをマスターに昇格する際に、一意のIDで検索できるため容易になった |
| 136 | +- レプリケーションする際、**GTID非互換のSQL文があるとエラーになるので、変換が必要** |
| 137 | + |
| 138 | +### 2-3-1. オンラインでGTIDを有効化する |
| 139 | +- 手順を下に示す |
| 140 | + 1. すべてのSQL文をGTID変換する |
| 141 | + 2. マスターとスレーブでGTIDが生成されるようにする |
| 142 | + 3. フルバックアップを取得する |
| 143 | + 4. GTIDレプリケーションに切り替える |
| 144 | + |
| 145 | +#### 2-3-1-1. すべてのSQL文をGTID変換する |
| 146 | +- `enforce_gtid_consistency`を使用する |
| 147 | + - GTID非互換のSQL文があると、エラーになってくれる |
| 148 | + - 引数に`WARN`を指定すると、動的に変更可能になる |
| 149 | + - 指定すると、エラーではなく、警告になり、**エラーログに出るので、出なくなるまでSQL変換をする** |
| 150 | + |
| 151 | + ```sql |
| 152 | + mysql> SET GLOBAL enforce_gtid_consistency = WARN; |
| 153 | + ``` |
| 154 | + |
| 155 | + - エラーを取り終えたら、`my.cnf`に上記の設定を追記しておくと良い |
| 156 | + |
| 157 | +#### 2-3-1-2. マスターとスレーブでGTIDが生成されるようにする |
| 158 | +- `gtid_mode`を使用する |
| 159 | +- 3段階の設定があり、順次試す |
| 160 | + - `OFF`から`OFF_PERMISSIVE`に変更する |
| 161 | + - マスターとスレーブは**新たにGTIDを生成することはない** |
| 162 | + - スレーブはマスターからGTIDを含んだバイナリログを受け取っても、GTIDを含まないバイナリログを受け取っても良い |
| 163 | + - `ON_PERMISSIVE`に変更する |
| 164 | + - マスターとスレーブは**新たにGTIDを生成する** |
| 165 | + - スレーブはマスターからGTIDを含んだバイナリログを受け取っても、GTIDを含まないバイナリログを受け取っても良い |
| 166 | + - **すべてのスレーブがGTIDモードに切り替わったか**、確認するには以下のコマンドを**マスターで使用**する |
| 167 | + |
| 168 | + ```sql |
| 169 | + mysql> SHOW GLOBAL STATUS LIKE 'Ongoing_anonymous_transaction_count`; |
| 170 | + ``` |
| 171 | +
|
| 172 | + - 出力される値が`0`になれば、切り替わったことになる |
| 173 | + - GTIDモードに切り替われば、`PERMISSIVE`な設定は不要なので、`gtid_mode`を`on`に設定する |
| 174 | +
|
| 175 | +#### 2-3-1-3. フルバックアップを取得する |
| 176 | +- フルバックアップを取得する理由は、**バイナリログにGTIDのOFFとONのときのイベントが混在するため** |
| 177 | +- バックアップツールで、`FLUSH LOGS`によって、**バイナリログがローテーションされるようにしておくと良い** |
| 178 | +- mysqldumpならば、`--flush-logs`オプションを使えばいい |
| 179 | +
|
| 180 | +#### 2-3-1-4. GTIDレプリケーションに切り替える |
| 181 | +- `MASTER_AUTO_POSITION = 1`に切り替える |
| 182 | +
|
| 183 | + ```sql |
| 184 | + mysql> STOP SLAVE; |
| 185 | + mysql> CHANGE MASTER TO MASTER_AUTO_POSITION = 1; |
| 186 | + mysql> START SLAVE USER = 'user' PASSWORD = 'pass'; |
| 187 | + ``` |
| 188 | +
|
| 189 | +### 2-3-2. GTIDのオンラインを無効化する |
| 190 | +- 有効化と真逆のことをすればいい |
| 191 | +- GTIDが使用されていないかの確認は、`gtid_owned`というシステム変数を確認すればいい |
| 192 | +
|
| 193 | + ```sql |
| 194 | + mysql> SELECT @@global.gtid_owned; |
| 195 | + ``` |
| 196 | +
|
| 197 | +### 2-3-3. 昇格しないスレーブ上でGTIDの管理が効率化 |
| 198 | +- `mysql.gtid_executed`というテーブルが追加された |
| 199 | + - バイナリログが有効化されていないスレーブでは、ここにGTIDを記録する |
| 200 | +- 1000行単位で、マージされるので**容量を圧縮できることが良い** |
0 commit comments