リレーログとはレプリケーションを構成する際にスレーブのみに生成されます。レプリケーションはマスターからバイナリログの情報をスレーブのI/
レプリケーションの構築方法は、mysqlbinlogコマンドを使用して更新情報を確認することもできます。
今回はこのリレーログについて説明します。
リレーログのオプション
リレーログを構成するためにいくつかのオプションがあります。
| オプション名 | デフォルト | 内容 |
|---|---|---|
| relay_ | HOSTNAME-relay-bin | リレーログファイル名 |
| relay_ | datadir + '/' + HOSTNAME-relay-bin | リレーログファイル名とフルパスを保持 |
| relay_ | HOSTNAME-relay-bin. | リレーログインデックスファイル名 |
| relay_ | relay-log. | リレーログの情報を記録するファイル名 |
| relay_ | FILE | リレーログのポジションを FILE (relay-log. |
| relay_ | TRUE | リレーログファイルが不要になるとすぐに自動的にパージの有効、 |
| relay_ | FALSE | MySQL起動直後のリレーログ自動リカバリの有効、 |
| relay_ | 0 | リレーログの合計サイズ |
| max_ | 0 | リレーログファイルを自動的にローテーションする最大バイト数 |
| sync_ | 10000 | 値分のイベントを処理するとリレーログファイルをフラッシュする |
| sync_ | 10000 | 値分のイベントを処理するとrelay-log. |
※)
relay_オプションと、relay_オプションの関係は、relay_にファイル名またはフルパスでリレーログファイル名を設定し、relay_はリレーログファイルの配置場所を確認することに使用します。
relay_をファイル名のみ設定した場合は、relay_のデフォルトのパスdatadir + '/' が付与されたファイルが生成されます。フルパスで設定した場合はrelay_が上書きされます。
relay_オプションは、relay_オプションで設定されたパスとファイル名を基に生成されます。
relay_オプションは、relay_がFILEの場合に生成されます。現在のリレーログファイルやそのポジションなどのスレーブのレプリケーションステータスを記録するファイルです。SQLスレッドが更新を行い、
sync_オプションとsync_オプションはrelay_オプションの値に大きく依存するため、
簡単に説明しますと、
リレーログの生成と削除
リレーログファイルはrelay_オプションで設定したファイル名に000001で始まるシーケンス番号が付与され、
以下のタイミングでリレーログが初期化
CHANGE MASTERでマスターの変更が行われた時RESET SLAVEが行われた時
以下のタイミングでリレーログがローテートされます。
START SLAVEなどのI/Oスレッド起動時 FLUSH LOGSまたはFLASH RELAY LOGSなどでログがフラッシュされた時max_オプションに指定したサイズより大きくなった場合。値が0の場合はrelay_ log_ size max_と同じ値になります。binlog_ size
以下のタイミングでリレーログが自動削除されます。
relay_オプションがTRUEの場合、log_ purge ローテートされたリレーログをSQLスレッドがすでに適用し不要と判断されると削除。FALSEの場合は自動で削除されません。
スレーブの状態について
SHOW SLAVE STATUSから現在どこまでのリレーログがスレーブに適用されたか確認できます。
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
:
:
Relay_Log_File: mysql-relay.000002
Relay_Log_Pos: 5277
:
:
Relay_Log_Space: 5480
:
:
- Relay_
Log_ File … SQLスレッドが適用しているリレーログ - Relay_
Log_ Pos … SQLスレッドが適用済のリレーログのポジション - Relay_
Log_ Space … 現在のリレーログファイルの合計サイズ
また、
以下の例は、mysql-relay.のポジション100を含むトランザクションを実行した後に、
mysql> START SLAVE UNTIL RELAY_LOG_FILE='mysql-relay.000003' , RELAY_LOG_POS=100;
クラッシュセーフスレーブ
MySQL5.
そのためにはデフォルト設定ではなく、
relay_= TABLElog_ info_ repository relay_= TRUElog_ recovery
この設定にすることで、