レプリケーションスレーブサーバーは 2 つのログを作成します。デフォルトでは、これらのログは master.info
および relay-log.info
という名前のファイルで、データディレクトリ内に作成されます。これらのファイルの名前と場所はそれぞれ、--master-info-file
および --relay-log-info-file
オプションを使用して変更できます。MySQL 5.6 以降では、適切なオプションでサーバーを起動することで、これらのどちらかまたは両方のログを mysql
データベース内のテーブルに書き込むこともできます: --master-info-repository
を使用すると、マスター情報ログが mysql.slave_master_info
テーブルに書き込まれ、--relay-log-info-repository
を使用すると、リレーログ情報ログが mysql.slave_relay_log_info
テーブルに書き込まれます。セクション17.1.4「レプリケーションおよびバイナリロギングのオプションと変数」を参照してください。
2 つのステータスログには、SHOW SLAVE STATUS
ステートメントの出力で示されるような情報が含まれます (セクション13.4.2「スレーブサーバーを制御するための SQL ステートメント」を参照)。ステータスログはディスクに格納されるため、スレーブサーバーのシャットダウン後も存在します。スレーブは、次に起動するときに 2 つのログを読み取って、マスターからのバイナリログ読み取りがそれ自身のリレーログの処理がどのくらい進んだかを判断します。
マスター情報ログファイルまたはテーブルは、マスターに接続するためのパスワードを含んでいるため、保護することをお勧めします。セクション6.1.2.3「パスワードおよびロギング」を参照してください。
スレーブ I/O スレッドはマスター情報ログを更新します。次の表は、master.info
ファイル内の行、mysql.slave_master_info
テーブル内のカラム、および SHOW SLAVE STATUS
で表示されるカラムの間の対応を示しています。
master.info ファイル内の行 |
slave_master_info テーブルのカラム |
SHOW SLAVE STATUS のカラム |
説明 |
---|---|---|---|
1 | Number_of_lines |
[None] | ファイル内の行、またはテーブル内のカラムの数 |
2 | Master_log_name |
Master_Log_File |
マスターから現在読み取られているマスターバイナリログの名前 |
3 | Master_log_pos |
Read_Master_Log_Pos |
マスターから読み取られたマスターのバイナリログ内の現在の位置です |
4 | Host |
Master_Host |
マスターのホスト名 |
5 | User_name |
Master_User |
マスターへの接続に使用されるユーザー名 |
6 | User_password |
パスワード (SHOW SLAVE STATUS では表示されない) |
マスターへの接続に使用されるパスワード |
7 | Port |
Master_Port |
マスターへの接続に使用されるネットワークポート |
8 | Connect_retry |
Connect_Retry |
マスターへの再接続を試みる前にスレーブが待機する期間 (秒単位) |
9 | Enabled_ssl |
Master_SSL_Allowed |
サーバーが SSL 接続をサポートするかどうかを示す |
10 | Ssl_ca |
Master_SSL_CA_File |
認証局 (CA) 証明書に使用されるファイル |
11 | Ssl_capath |
Master_SSL_CA_Path |
認証局 (CA) 証明書へのパス |
12 | Ssl_cert |
Master_SSL_Cert |
SSL 証明書ファイルの名前 |
13 | Ssl_cipher |
Master_SSL_Cipher |
SSL 接続のハンドシェイクで使用される可能な暗号のリスト |
14 | Ssl_key |
Master_SSL_Key |
SSL キーファイルの名前 |
15 | Ssl_verify_server_cert |
Master_SSL_Verify_Server_Cert |
サーバー証明書を検証するかどうか |
16 | Heartbeat |
[None] | レプリケーションハートビートの間隔 (秒単位) |
17 | Bind |
Master_Bind |
マスターへの接続にスレーブのどのネットワークインタフェースを使用すべきか |
18 | Ignored_server_ids |
Replicate_Ignore_Server_Ids |
無視するサーバー ID のリスト。Ignored_server_ids の場合、サーバー ID のリストの前に、無視するサーバー ID の合計数が付きます。 |
19 | Uuid |
Master_UUID |
マスターの一意 ID |
20 | Retry_count |
Master_Retry_Count |
許容される再接続試行の最大数 |
21 | Ssl_crl |
[None] | SSL 証明書失効リストファイルへのパス (MySQL バージョン 5.6.3 で追加) |
22 | Ssl_crl_path |
[None] | SSL 証明書失効リストファイルを含むディレクトリへのパス (MySQL バージョン 5.6.3 で追加) |
23 | Enabled_auto_position |
Auto_position |
自動ポジショニングが使用中かどうか (MySQL バージョン 5.6.5 で追加) |
MySQL 5.6.3 より前では、Ssl_verify_server_cert
カラムの名前は Ssl_verify_servert_cert
でした。(Bug #12407446、Bug #60988)
スレーブ SQL スレッドはリレーログ情報ログを更新します。MySQL 5.6 では、relay-log.info
ファイルに行数とレプリケーション遅延値が含まれます。次の表は、relay-log.info
ファイル内の行、mysql.slave_relay_log_info
テーブル内のカラム、および SHOW SLAVE STATUS
で表示されるカラムの間の対応を示します。
relay-log.info 内の行 |
slave_relay_log_info テーブルのカラム |
SHOW SLAVE STATUS のカラム |
説明 |
---|---|---|---|
1 | Number_of_lines |
[None] | ファイル内の行またはテーブル内のカラムの数 |
2 | Relay_log_name |
Relay_Log_File |
現在のリレーログファイルの名前 |
3 | Relay_log_pos |
Relay_Log_Pos |
リレーログファイル内の現在の位置。この位置までのイベントがスレーブデータベースで実行された |
4 | Master_log_name |
Relay_Master_Log_File |
リレーログファイル内のイベントが読み取られたマスターバイナリログファイルの名前 |
5 | Master_log_pos |
Exec_Master_Log_Pos |
すでに実行されたイベントの、マスターのバイナリログファイル内での対応位置 |
5 | Sql_delay |
SQL_Delay |
スレーブがマスターより遅れる必要がある秒数 |
6 | Number_of_workers |
[None] | レプリケーションイベント (トランザクション) を並列に実行するためのスレーブワーカースレッドの数 (MySQL バージョン 5.6.7 で追加) |
7 | Id |
[None] | スレーブがマスターより遅れる必要がある秒数 (MySQL バージョン 5.6.7 で追加) |
MySQL 5.6 より前では、relay-log.info
ファイルに行数または遅延値が含まれません (さらに、slave_relay_log_info
テーブルを使用できません)。
行 | Status カラム | 説明 |
---|---|---|
1 | Relay_Log_File |
現在のリレーログファイルの名前 |
2 | Relay_Log_Pos |
リレーログファイル内の現在の位置。この位置までのイベントがスレーブデータベースで実行された |
3 | Relay_Master_Log_File |
リレーログファイル内のイベントが読み取られたマスターバイナリログファイルの名前 |
4 | Exec_Master_Log_Pos |
すでに実行されたイベントの、マスターのバイナリログファイル内での対応位置 |
スレーブサーバーを MySQL 5.6 より古いバージョンにダウングレードした場合、古いサーバーは relay-log.info
ファイルを正しく読み取りません。これに対処するには、テキストエディタでファイルを変更し、行数を含む最初の行を削除してください。
relay-log.info
ファイルの内容と SHOW SLAVE STATUS
ステートメントで表示される状態は、relay-log.info
ファイルがディスクにフラッシュされていない場合には一致しない場合があります。理想を言えば、オフライン (つまり、mysqld
が動作していない) であるスレーブ上でのみ relay-log.info
を表示することをお勧めします。動作中のシステムでは、SHOW SLAVE STATUS
を使用するか、ステータスログをテーブルに書き込んでいる場合は slave_master_info
および slave_relay_log_info
テーブルを照会できます。
スレーブのデータをバックアップするときは、リレーログファイルに加えてこれらの 2 つのステータスログもバックアップすることをお勧めします。ステータスログは、スレーブからデータをリストアしたあとにレプリケーションを再開するために必要です。リレーログを失ったけれども、まだリレーログ情報ログがある場合には、それを調べて、マスターバイナリログで SQL スレッドがどのくらい離れて実行されたかを判断できます。それから MASTER_LOG_FILE
および MASTER_LOG_POS
オプションで CHANGE MASTER TO
を使用することで、そのポイントからバイナリログを再度読み取るようにスレーブに指示できます。もちろん、これにはバイナリログがまだマスター上に存在している必要があります。