Skip to content

Commit 654a398

Browse files
committed
update chapter2 and add conf setting option
1 parent 0b8a99b commit 654a398

File tree

5 files changed

+81
-2
lines changed

5 files changed

+81
-2
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
*.sh
1+
*.sh
2+
*.xml
16.7 KB
Loading

learn/chapter02.md

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,73 @@
128128
```
129129

130130
- コマンドが正常に終了したか、確認するために、`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行単位で、マージされるので**容量を圧縮できることが良い**

setting/conf/option.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# オプション
2+
3+
## log_slave_updates
4+
- `log_slave_updates`を設定することで、スレーブサーバーにもマスターから**送られてきた更新をバイナリログに書き込める**ようになる。
5+
- スレーブサーバーとして使用しているDBサーバーをマスターとして扱い、更にスレーブサーバーを作成するできる
6+
- 以下のような構成を行いたいときに設定する
7+
8+
![replication-log-slave-updates.PNG](../../image/replication-log-slave-updates.png)
9+
File renamed without changes.

0 commit comments

Comments
 (0)