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: 3306
Connect_Retry: 3
Master_Log_File: gbichot-bin.005
Read_Master_Log_Pos: 79
Relay_Log_File: gbichot-relay-bin.005
Relay_Log_Pos: 548
Relay_Master_Log_File: gbichot-bin.005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 79
Relay_Log_Space: 552
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: 8
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
SHOW SLAVE
STATUS
は次のフィールドを返します。
Slave_IO_State
スレーブ I/O スレッドのための
SHOW PROCESSLIST
の出力の
State
フィールドのコピー。これで、スレッドが何をしているかを知ることができます。マスタに接続しようとしている、マスタからイベントを待っている、マスタに再接続している、など。Replication Implementation Details
にステートの例がリストされています。古いバージョンの
MySQL
では、マスタへの接続が成功していなくてもスレッドが起動し続けることができるので、このフィールドを確認する必要があります。もし起動していれば問題はありませんが、もしそうでなければ、Last_Error
フィールド内にエラーを見つけることができます。(下記で説明)
Master_Host
現在のマスタホスト。
Master_User
マスタに接続するために利用される現在のユーザー。
Master_Port
現在のマスタポート。
Connect_Retry
接続再試行の間の秒数 (デフォルトは
60)。この値は、CHANGE
MASTER TO
ステートメントまたは
--master-connect-retry
オプションで設定できます。
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
スレッドは実行されていません。
MYSQL_SLAVE_RUN_NOT_CONNECT
.
スレーブ I/O
スレッドは実行されていますが、レプリケーションマスターに接続されていません。
MYSQL_SLAVE_RUN_CONNECT
.
スレーブ I/O
スレッドは実行されており、レプリケーションマスターに接続されています。
次の表に示すように、Slave_IO_running
には、スレーブ I/O
スレッドの実際の状態と、レプリケーションスレーブ上で使用されている
MySQL
のバージョンに応じて異なる値が表示されます。
MySQL バージョン | MYSQL_SLAVE_NOT_RUN |
MYSQL_SLAVE_RUN_NOT_CONNECT |
MYSQL_SLAVE_RUN_CONNECT |
---|---|---|---|
4.1 (4.1.13 以前)、5.0 (5.0.11 以前) | No |
Yes |
Yes |
4.1 (4.1.14 以降)、5.0 (5.0.12 以降) | No |
No |
Yes |
5.1、5.4 (すべて) | No |
No |
Yes |
6.0 (6.0.10 以前) | No |
No |
Yes |
6.0 (6.0.11 以降) | No |
接続 |
Yes |
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
MySQL 5.1.20 の時点では、これらのカラムは
Last_SQL_Errno
および
Last_SQL_Error
のエイリアスです。5.1.20
より前のバージョンでは、もっとも最近実行されたステートメントによって返されたエラー番号とエラーメッセージを示します。0
のエラー番号および空の文字列のメッセージは、「エラーがない」ことを示します。Last_Error
値が空でない場合、この値はスレーブのエラーログ内のメッセージとしても表示されます。
MySQL 5.1.37、さらに MySQL Cluster NDB 6.2.17、MySQL
Cluster NDB 6.3.23、および MySQL Cluster NDB 6.4.3
からは、RESET
MASTER
または
RESET SLAVE
を発行すると、これらのカラムに表示されている値がリセットされます。(Bug#34654、Bug#44270)
スレーブ SQL
スレッドはエラーを受信すると、最初にエラーを報告し、次に
SQL
スレッドを停止します。つまり、Slave_SQL_Running
が引き続き Yes
を表示しているにもかかわらず、SHOW
SLAVE STATUS
が
Last_Errno
にゼロ以外の値を表示する短い時間帯が存在します。
Skip_Counter
SQL_SLAVE_SKIP_COUNTER
に一番最近利用された値。
Exec_Master_Log_Pos
マスタのバイナリログから SQL
スレッドによって実行された最後のイベントの位置
(Relay_Master_Log_File
)。マスターのバイナリログ内の
(Relay_Master_Log_File
、Exec_Master_Log_Pos
)
は、リレーログ内の
(Relay_Log_File
、Relay_Log_Pos
)
に対応しています。
Relay_Log_Space
すべての既存リレーログを合計したサイズ。
Until_Condition
、Until_Log_File
、Until_Log_Pos
START SLAVE
ステートメントの
UNTIL
節内で指定された値。
Until_Condition
は 3
つの値を持ちます。
UNTIL
節が指定されなければ
None
。
もしスレーブがマスタのバイナリログ内の指定位置まで読み込んでいたら
Master
。
もしスレーブがそのリレーログ内の指定位置まで読み込んでいたら
Relay
。
Until_Log_File
と
Until_Log_Pos
は、SQL
スレッドが実行を停止する時点を定義する、ログファイル名と位置の値を示します。
Master_SSL_Allowed
、Master_SSL_CA_File
、Master_SSL_CA_Path
、Master_SSL_Cert
、Master_SSL_Cipher
、Master_SSL_Key
これらのフィールドは、もし 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_KEY
、および
MASTER_SSL_VERIFY_SERVER_CERT
オプションの値に対応しています。詳しくは項8.6.2.1. 「CHANGE MASTER TO
構文」を参照してください。MASTER_SSL_VERIFY_SERVER_CERT
は、MySQL 5.1.18 で追加されました。
Seconds_Behind_Master
このフィールドは、スレーブがどの程度 「late」 であるかの目安です。
スレーブ SQL スレッドがアクティブに起動しているとき (更新を実行しているとき)、このフィールドはスレッドによって実行されたマスタ上の一番最近のイベントのタイムスタンプから経過した秒数を表します。
SQL スレッドがスレーブ I/O スレッドに追い付き、この I/O スレッドからのそれ以上のイベントを待機してアイドル状態に入った場合、このフィールドは 0 になります。
基本的に、このフィールドはスレーブ SQL スレッドとスレーブ I/O スレッド間の時差を秒数で計算します。
もしマスタとスレーブ間のネットワーク接続が速ければ、スレーブ
I/O
スレッドはマスタにとても近いので、このフィールドはマスタと比べてスレーブ
SQL
スレッドがどれくらい遅いかを表す近似値と言えます。ネットワークが低速な場合、これは良い近似値ではありません。スレーブ
SQL スレッドが、読み取りの遅いスレーブ
I/O
スレッドに非常に頻繁に追い付かれる可能性があるため、I/O
スレッドがマスターに比べて低速な場合でも、Seconds_Behind_Master
にはたいてい 0
の値が表示されます。言い換えると、このカラムは速いネットワークに対してだけ有効である
ということです。
この時間差の算出は、マスタとスレーブが同一の時計を持たなくても機能します。(時計の違いはスレーブ
I/O
スレッドがスタートするときに計算され、その時点から一定であると仮定されます)。Seconds_Behind_Master
は、もしスレーブ SQL
スレッドが起動していなかったり、スレーブ
I/O
スレッドが起動していない、またはマスタに接続されていないときは、NULL
です (「unknown」
を意味する)。たとえば、スレーブ I/O
スレッドが再接続の前に
CHANGE MASTER
TO
ステートメントまたは
--master-connect-retry
オプション (デフォルトは 60)
で指定された秒数にわたってスリープ状態にある場合、スレーブはマスターで実行されている処理がわからず、どれだけ遅延するかがはっきりしないため、NULL
が表示されます。
このフィールドには 1
つ制限があります。タイムスタンプはレプリケーション中に維持されますので、これは、もしマスタ
M1 自体が M0 のスレーブだったら、M0
のビンログからのイベントをレプリケーションする上で発生した
M1 のビンログからのイベントは、M0
のイベントのタイムスタンプを持つ、ということを意味します。これは
MySQL が
TIMESTAMP
を正常に複製することを可能にします。ただし、Seconds_Behind_Master
の問題は、M1
がクライアントからの直接の更新も受信した場合は、最後の
M1 のイベントが M0
から来ている場合や、直接の更新からの最新のタイムスタンプである場合があるため、値がランダムに逸脱することにあります。
Last_IO_Errno
、Last_IO_Error
I/O
スレッドを停止させた最後のエラーのエラー番号とエラーメッセージ。0
のエラー番号および空の文字列のメッセージは、「エラーがない」ことを示します。Last_IO_Error
値が空でない場合、この値はスレーブのエラーログ内のメッセージとしても表示されます。これらのカラムは、MySQL
5.1.20 で追加されました。
MySQL Cluster.
MySQL Cluster NDB 6.2.17、6.3.23、および 6.4.3
からは、RESET
MASTER
または
RESET
SLAVE
を発行すると、これらのカラムに表示されている値がリセットされます。これは、MySQL
Cluster にのみ適用されます。(Bug#34654)
Last_SQL_Errno
、Last_SQL_Error
SQL
スレッドを停止させた最後のエラーのエラー番号とエラーメッセージ。0
のエラー番号および空の文字列のメッセージは、「エラーがない」ことを示します。Last_IO_Error
値が空でない場合、この値はスレーブのエラーログ内のメッセージとしても表示されます。これらのカラムは、MySQL
5.1.20 で追加されました。
例 :
Last_SQL_Errno: 1051 Last_SQL_Error: error 'Unknown table 'z'' on query 'drop table z'
このメッセージは、テーブル
z
がマスタ上に存在しそこでドロップされたが、それはスレーブ上には存在しなかったため、スレーブ上で
DROP TABLE
が失敗した、ということを含んでいます。(これはたとえば、レプリケーションをセットアップするときにテーブルをスレーブにコピーするのを忘れたときに起きます)。
MySQL Cluster.
MySQL Cluster NDB 6.2.17、6.3.23、および 6.4.3
からは、RESET
MASTER
または
RESET
SLAVE
を発行すると、これらのカラムに表示されている値がリセットされます。これは、MySQL
Cluster にのみ適用されます。(Bug#34654)