SHOW SLAVE STATUS
このステートメントは、スレーブスレッドの基本的なパラメータに関するステータス情報を提供します。これには、SUPER
または REPLICATION CLIENT
権限のどちらかが必要です。
mysql クライアントを使用してこのステートメントを発行する場合は、セミコロンの代わりに \G
ステートメントターミネータを使用すると、より読みやすい縦のレイアウトが得られます。
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: localhost
Master_User: root
Master_Port: 13000
Connect_Retry: 60
Master_Log_File: master-bin.000002
Read_Master_Log_Pos: 1307
Relay_Log_File: slave-relay-bin.000003
Relay_Log_Pos: 1508
Relay_Master_Log_File: master-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1307
Relay_Log_Space: 1858
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 3e11fa47-71ca-11e1-9e33-c80aa9429562
Master_Info_File: /var/mysqld.2/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 10
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5
Executed_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5
Auto_Position: 1
1 row in set (0.00 sec)
次のリストは、SHOW SLAVE STATUS
によって返されるフィールドについて説明しています。これらの意味の解釈の詳細は、セクション8.12.5.6「レプリケーションスレーブの I/O スレッド状態」を参照してください。
-
Slave_IO_State
スレーブ I/O スレッドに対する
SHOW PROCESSLIST
の出力のState
フィールドのコピー。これにより、このスレッドが何を実行しているか (マスターに接続しようとしている、マスターからのイベントを待機している、マスターに再接続しているなど) がわかります。可能性のある状態のリストについては、セクション8.12.5.6「レプリケーションスレーブの I/O スレッド状態」を参照してください。 -
Master_Host
このスレーブが接続されているマスターホスト。
-
Master_User
マスターに接続するために使用されるアカウントのユーザー名。
-
Master_Port
マスターに接続するために使用されるポート。
-
Connect_Retry
接続再試行の間の秒数 (デフォルトは 60)。これは、
CHANGE MASTER TO
ステートメントで設定できます。 -
Master_Log_File
I/O スレッドが現在読み取っている元のマスターバイナリログファイルの名前。
-
Read_Master_Log_Pos
現在のマスターバイナリログファイル内の I/O スレッドが最後に読み取った位置。
-
Relay_Log_File
SQL スレッドが現在読み取って実行している元のリレーログファイルの名前。
-
Relay_Log_Pos
現在のリレーログファイル内の SQL スレッドが最後に読み取って実行した位置。
-
Relay_Master_Log_File
SQL スレッドによって実行された最新のイベントを含むマスターバイナリログファイルの名前。
-
Slave_IO_Running
I/O スレッドが起動され、マスターに正常に接続したかどうか。内部的には、このスレッドの状態は次の 3 つの値のいずれかによって表されます。
MYSQL_SLAVE_NOT_RUN スレーブ I/O スレッドは実行されていません。この状態の場合、
Slave_IO_Running
はNo
です。-
MYSQL_SLAVE_RUN_NOT_CONNECT スレーブ I/O スレッドは実行されていますが、レプリケーションマスターに接続されていません。この状態の場合、
Slave_IO_Running
は、次の表に示すようにサーバーバージョンによって異なります。MySQL バージョン Slave_IO_Running
4.1 (4.1.13 以前)、5.0 (5.0.11 以前) Yes
4.1 (4.1.14 以降)、5.0 (5.0.12 以降) No
5.1 (5.1.45 以前) No
5.1 (5.1.46 以降)、5.5、5.6 Connecting
MYSQL_SLAVE_RUN_CONNECT スレーブ I/O スレッドは実行されており、レプリケーションマスターに接続されています。この状態の場合、
Slave_IO_Running
はYes
です。
Slave_running
システムステータス変数の値は、この値に対応します。 -
Slave_SQL_Running
SQL スレッドが起動されたかどうか。
-
Replicate_Do_DB
、Replicate_Ignore_DB
--replicate-do-db
および--replicate-ignore-db
オプションで指定されたデータベースのリスト (存在する場合)。 -
Replicate_Do_Table
、Replicate_Ignore_Table
、Replicate_Wild_Do_Table
、Replicate_Wild_Ignore_Table
--replicate-do-table
、--replicate-ignore-table
、--replicate-wild-do-table
、および--replicate-wild-ignore-table
オプションで指定されたテーブルのリスト (存在する場合)。 -
Last_Errno
、Last_Error
これらのカラムは、
Last_SQL_Errno
およびLast_SQL_Error
のエイリアスです。RESET MASTER
またはRESET SLAVE
を発行すると、これらのカラムに表示されている値がリセットされます。注記スレーブ SQL スレッドは、エラーを受信すると、まずそのエラーをレポートしてから SQL スレッドを停止します。つまり、
Slave_SQL_Running
にまだYes
が表示されているにもかかわらず、SHOW SLAVE STATUS
がLast_SQL_Errno
に対して 0 以外の値を示す短い時間帯が存在します。 -
Skip_Counter
sql_slave_skip_counter
システム変数の現在の値。セクション13.4.2.4「SET GLOBAL sql_slave_skip_counter 構文」を参照してください。 -
Exec_Master_Log_Pos
現在のマスターバイナリログファイル内の、SQL スレッドが処理対象の次のトランザクションまたはイベントの先頭をマークしながら読み取って実行した最後の位置。既存のスレーブから新しいスレーブを起動するときに、その新しいスレーブがこの位置から読み取りを開始するように、
CHANGE MASTER TO
ステートメントのMASTER_LOG_POS
オプションでこの値を使用できます。マスターのバイナリログ内の (Relay_Master_Log_File
、Exec_Master_Log_Pos
) で指定される座標は、リレーログ内の (Relay_Log_File
、Relay_Log_Pos
) で指定される座標に対応します。(MySQL 5.6.3 以降で
slave_parallel_workers
を 0 以外の値に設定することによって) マルチスレッドスレーブを使用している場合は、このカラム内の値が実際に、コミットされていないトランザクションがその前には残っていない「低位境界」値を表します。現在の実装では、別のデータベース上のトランザクションをスレーブ上でマスター上とは異なる順序で実行することが許可されるため、これは必ずしも、直近で実行されたトランザクションの位置ではありません。 -
Relay_Log_Space
既存のすべてのリレーログファイルの合計サイズ。
-
Until_Condition
、Until_Log_File
、Until_Log_Pos
START SLAVE
ステートメントのUNTIL
句で指定された値。Until_Condition
の値は次のとおりです。UNTIL
句が指定されなかった場合はNone
このスレーブがマスターのバイナリログ内の特定の位置まで読み取っている場合は
Master
このスレーブがそのリレーログ内の特定の位置まで読み取っている場合は
Relay
MySQL 5.6.6 からは、次の値を持つ、GTID に関連した
UNTIL
句が追加されました。スレーブ SQL スレッドが、
gtid_set
に GTID がリストされている最初のトランザクションに達するまでトランザクションを処理している場合は、SQL_BEFORE_GTIDS
。スレーブスレッドが、
gtid_set
内の最後のトランザクションが両方のスレッドによって処理されるまですべてのトランザクションを処理している場合は、SQL_AFTER_GTIDS
。マルチスレッドスレーブの SQL スレッドが、リレーログ内にそれ以上ギャップが見つからなくなるまで実行する場合は
SQL_AFTER_MTS_GAPS
。
Until_Log_File
とUntil_Log_Pos
は、ログファイルの名前と、SQL スレッドが実行を停止する座標を定義している位置を示します。UNTIL
句の詳細は、セクション13.4.2.5「START SLAVE 構文」を参照してください。 -
Master_SSL_Allowed
、Master_SSL_CA_File
、Master_SSL_CA_Path
、Master_SSL_Cert
、Master_SSL_Cipher
、Master_SSL_CRL_File
、Master_SSL_CRL_Path
、Master_SSL_Key
、Master_SSL_Verify_Server_Cert
これらのフィールドは、このスレーブがマスターに接続するために使用する SSL パラメータを表示します (存在する場合)。
Master_SSL_Allowed
の値は次のとおりです。マスターへの SSL 接続が許可されている場合は
Yes
マスターへの SSL 接続が許可されていない場合は
No
SSL 接続は許可されているが、スレーブサーバーで SSL サポートが有効になっていない場合は
Ignored
その他の SSL 関連フィールドの値は、
CHANGE MASTER TO
ステートメントに対するMASTER_SSL_CA
、MASTER_SSL_CAPATH
、MASTER_SSL_CERT
、MASTER_SSL_CIPHER
、MASTER_SSL_CRL
、MASTER_SSL_CRLPATH
、MASTER_SSL_KEY
、およびMASTER_SSL_VERIFY_SERVER_CERT
オプションの値に対応します。セクション13.4.2.1「CHANGE MASTER TO 構文」を参照してください。Master_SSL_CRL_File
とMaster_SSL_CRL_Path
は MySQL 5.6.3 で追加されました。 -
Seconds_Behind_Master
このフィールドは、このスレーブがどれだけ「遅延している」かを示します。
このスレーブが更新をアクティブに処理している場合、このフィールドは、現在このスレーブ上で処理されている最新のイベントに対するスレーブ上の現在のタイムスタンプと、マスター上でログに記録されている元のタイムスタンプの違いを示します。
現在このスレーブ上でイベントが処理されていない場合、この値は 0 です。
基本的に、このフィールドは、スレーブ SQL スレッドとスレーブ I/O スレッドの間の時間差 (秒単位) を測定します。マスターとスレーブの間のネットワーク接続が高速である場合は、スレーブ I/O スレッドがマスターに非常に近いため、このフィールドは、スレーブ SQL スレッドがマスターに比べてどれだけ遅延しているかを示す良い近似値になります。このネットワークが低速である場合、これは良い近似値ではありません。スレーブ SQL スレッドが、読み取りの遅いスレーブ I/O スレッドに非常に頻繁に追い付かれる可能性があるため、I/O スレッドがマスターに比べて遅延している場合でも、
Seconds_Behind_Master
は多くの場合 0 の値を示します。つまり、このカラムは高速ネットワークの場合にのみ有効です。この時間差の計算は、スレーブ I/O スレッドの起動時に計算された時間差がそれ以降も一定のままであれば、マスターとスレーブのクロック時間が同じでない場合でも機能します。何らかの変更 (NTP の更新を含む) があると、
Seconds_Behind_Master
の計算の信頼性を低下させるクロックスキューが発生する場合があります。MySQL 5.6.9 以降では、このフィールドは、スレーブ SQL スレッドが実行されていない場合、または SQL スレッドがすべてのリレーログを消費し、かつスレーブ I/O スレッドが実行されていない場合に
NULL
(未定義または不明) になります。以前は、このフィールドは、スレーブ SQL スレッドまたはスレーブ I/O スレッドが実行されていないか、あるいはマスターに接続されていない場合にNULL
になりました。(Bug #12946333) たとえば、(MySQL 5.6.9 より前) スレーブ I/O スレッドが実行されているが、マスターに接続されておらず、再接続の前にCHANGE MASTER TO
ステートメントまたは--master-connect-retry
オプションで指定された秒数 (デフォルトは 60) だけスリープしている場合、この値はNULL
でした。現在、このようなケースでは、マスターへの接続はテストされません。代わりに、I/O スレッドが実行されているが、リレーログが使い果たされた場合は、Seconds_Behind_Master
が 0 に設定されます。Seconds_Behind_Master
の値は、イベント内に格納されているタイムスタンプに基づいており、このタイムスタンプはレプリケーションを通して保持されます。つまり、マスター M1 がそれ自体 M0 のスレーブである場合、M0 のバイナリログに起因する M1 のバイナリログからのイベントはすべて、そのイベントに M0 のタイムスタンプを含んでいます。これにより、MySQL はTIMESTAMP
を正常にレプリケートできます。ただし、Seconds_Behind_Master
に関する問題は、M1 がクライアントからの直接の更新も受信した場合、M1 からの最後のイベントがときには M0 に起因し、またときには M1 上での直接の更新の結果であるため、Seconds_Behind_Master
値がランダムに変動することにあります。マルチスレッドスレーブ (MySQL 5.6.3 以降) を使用している場合は、この値が
Exec_Master_Log_Pos
に基づいているため、直近でコミットされたトランザクションの位置を反映していない可能性があります。 -
Last_IO_Errno
、Last_IO_Error
I/O スレッドを停止させた最新のエラーのエラー番号とエラーメッセージ。0 のエラー番号および空の文字列のメッセージは、「エラーなし」を示します。
Last_IO_Error
値が空でない場合、このエラー値はスレーブのエラーログにも現れます。MySQL 5.6.1 から、I/O エラーの情報には、最新の I/O スレッドエラーがいつ発生したかを示すタイムスタンプが含まれています。このタイムスタンプには、
YYMMDD HH:MM:SS
という形式が使用されます。MySQL 5.6.3 より前は、このタイムスタンプは、
Last_IO_Error
カラムに表示されるエラーメッセージテキストの前に付加されました。MySQL 5.6.3 以降では、このタイムスタンプは、代わりにLast_SQL_Error_Timestamp
カラムに表示されます。RESET MASTER
またはRESET SLAVE
を発行すると、これらのカラムに表示されている値がリセットされます。 -
Last_SQL_Errno
、Last_SQL_Error
SQL スレッドを停止させた最新のエラーのエラー番号とエラーメッセージ。0 のエラー番号および空の文字列のメッセージは、「エラーなし」を示します。
Last_SQL_Error
値が空でない場合、このエラー値はスレーブのエラーログにも現れます。MySQL 5.6.1 から、SQL エラーの情報には、最新の SQL スレッドエラーがいつ発生したかを示すタイムスタンプが含まれています。このタイムスタンプには、
YYMMDD HH:MM:SS
という形式が使用されます。MySQL 5.6.3 より前は、このタイムスタンプは、
Last_SQL_Error
カラムに表示されるエラーメッセージテキストの前に付加されました。MySQL 5.6.3 以降では、このタイムスタンプは、代わりにLast_SQL_Error_Timestamp
カラムに表示されます。RESET MASTER
またはRESET SLAVE
を発行すると、これらのカラムに表示されている値がリセットされます。 -
Replicate_Ignore_Server_Ids
MySQL 5.6 では、
CHANGE MASTER TO
ステートメントのIGNORE_SERVER_IDS
オプションを使用して、0 以上のマスターからのイベントを無視するようにスレーブを設定します。これはデフォルトではブランクであり、通常は、循環またはその他のマルチマスターレプリケーションセットアップを使用している場合にのみ変更されます。ブランクでないときにReplicate_Ignore_Server_Ids
に表示されるメッセージは、無視されるサーバー ID を示す 1 つ以上の番号のカンマ区切りリストで構成されます。例:Replicate_Ignore_Server_Ids: 2, 6, 9
注記Ignored_server_ids
も無視されるサーバー ID を示しますが、これは、無視されるサーバー ID の総数が前にあるスペースで区切られたリストです。たとえば、サーバー ID 2、6、または 9 を持つマスターを無視するようスレーブに指示するためにIGNORE_SERVER_IDS = (2,6,9)
オプションを含むCHANGE MASTER TO
ステートメントが発行された場合、その情報は次のように表示されます。Ignored_server_ids: 3 2 6 9
ここで、
3
は、無視されるサーバー ID の総数です。Replicate_Ignore_Server_Ids
のフィルタリングは SQL スレッドではなく、I/O スレッドによって実行されます。つまり、フィルタで除外されるイベントはリレーログに書き込まれません。これは、SQL スレッドに適用される--replicate-do-table
などのサーバーオプションによって実行されるフィルタリングアクションとは異なります。 -
Master_Server_Id
マスターからの
server_id
値。 -
Master_UUID
マスターからの
server_uuid
値。このフィールドは、MySQL 5.6.0 で追加されました。 -
Master_Info_File
master.info
ファイルの場所。このフィールドは、MySQL 5.6.0 で追加されました。 -
SQL_Delay
このスレーブがマスターから遅延する必要がある秒数。このフィールドは、MySQL 5.6.0 で追加されました。
-
SQL_Remaining_Delay
Slave_SQL_Running_State
がWaiting until MASTER_DELAY seconds after master executed event
である場合、このフィールドには残りの遅延秒数が含まれます。ほかのときは、このフィールドはNULL
です。このフィールドは、MySQL 5.6.0 で追加されました。 -
Slave_SQL_Running_State
SQL スレッドの状態 (
Slave_IO_State
に類似しています)。この値は、SHOW PROCESSLIST
によって表示される SQL スレッドのState
値と同じです。セクション8.12.5.7「レプリケーションスレーブ SQL スレッドの状態」には、可能性のある状態のリストが示されています。このフィールドは、MySQL 5.6.0 で追加されました。 -
Master_Retry_Count
接続が失われた場合に、このスレーブがマスターへの再接続を試みることができる回数。この値は、
CHANGE MASTER TO
ステートメントのMASTER_RETRY_COUNT
オプション (推奨)、または古い--master-retry-count
サーバーオプション (下位互換性のために引き続きサポートされています) を使用して設定できます。このフィールドは、MySQL 5.6.1 で追加されました。 -
Master_Bind
このスレーブのバインド先のネットワークインタフェース (存在する場合)。これは、
CHANGE MASTER TO
ステートメントのMASTER_BIND
オプションを使用して設定されます。このカラムは、MySQL 5.6.2 で追加されました。
-
Last_IO_Error_Timestamp
最新の I/O エラーがいつ発生したかを示す
YYMMDD HH:MM:SS
形式のタイムスタンプ。このカラムは、MySQL 5.6.3 で追加されました。以前 MySQL 5.6 では、このタイムスタンプは、
Last_IO_Error
に表示されるエラーテキストの前に付加されました。 -
Last_SQL_Error_Timestamp
最新の SQL エラーがいつ発生したかを示す
YYMMDD HH:MM:SS
形式のタイムスタンプ。このカラムは、MySQL 5.6.3 で追加されました。以前 MySQL 5.6 では、このタイムスタンプは、
Last_SQL_Error
に表示されるエラーテキストの前に付加されました。 -
Retrieved_Gtid_Set
このスレーブによって受信されたすべてのトランザクションに対応するグローバルトランザクション ID のセット。GTID が使用されていない場合は空です。
これは、リレーログ内に存在するか、またはこれまでに存在したすべての GTID のセットです。各 GTID は、
Gtid_log_event
が受信されるとすぐに追加されます。そのため、このセットには、部分的に転送されたトランザクションの GTID も含まれる場合があります。RESET SLAVE
またはCHANGE MASTER TO
を実行したため、あるいは--relay-log-recovery
オプションの効果のためにすべてのリレーログが失われた場合は、このセットがクリアされます。relay_log_purge = 1
のときは、最新のリレーログが常に保持されるため、このセットはクリアされません。このカラムは、MySQL 5.6.5 で追加されました。
MySQL 5.6.10 より前は、この値は大文字で出力されました。MySQL 5.6.10 以降では、常に小文字で出力されます。(Bug #15869441)
-
Executed_Gtid_Set
バイナリログに書き込まれたグローバルトランザクション ID のセット。これは、このサーバー上のグローバルな
gtid_executed
システム変数 (MySQL 5.6.9 より前の名前はgtid_done
) の値や、このサーバー上でのSHOW MASTER STATUS
の出力内のExecuted_Gtid_Set
の値と同じです。GTID が使用されていない場合は空です。このカラムは、MySQL 5.6.5 で追加されました。
MySQL 5.6.10 より前は、この値は大文字で出力されました。MySQL 5.6.10 以降では、常に小文字で出力されます。(Bug #15869441)
-
Auto_Position
自動ポジショニングが使用されている場合は 1、それ以外の場合は 0。
このカラムは、MySQL 5.6.10 で追加されました。(Bug #15992220)