SHOW SLAVE STATUS
このステートメントは、スレーブ
スレッドに不可欠なパラメータ上にステータス情報を提供します。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
SHOW SLAVE STATUS
は次のフィールドを返します。
Slave_IO_State
スレーブ I/O スレッドの為の SHOW
PROCESSLIST
のアウトプットの
State
フィールドのコピー。これで、スレッドが何をしているかを知る事ができます。マスタに接続しようとしている、マスタからイベントを待っている、マスタに再接続している、など。項5.5.1. 「レプリケーション実装の詳細」
にステートの例がリストされています。古いバージョンの
MySQL
では、マスタへの接続が成功していなくてもスレッドが起動し続ける事ができるので、このフィールドを確認する必要があります。もし起動していれば問題は有りませんが、もしそうでなければ、Last_Error
フィールド内にエラーを見つけることができます。(下記で説明)
Master_Host
現在のマスタ ホスト。
Master_User
マスタに接続する為に利用される現在のユーザ。
Master_Port
現在のマスタ ポート。
Connect_Retry
--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
スレッドがスタートされて、マスタに正常に接続したかどうか。MySQL
の古いバージョンでは( 4.1.14 と 5.0.12
以前)、スレーブがまだマスタに接続されていなくても
Slave_IO_Running
は
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
一番最近実行されたクエリに返されるエラー数とエラー
メッセージ。エラー数が0で、空の文字列のメッセージであれば、「no
error.」 です。もし
Last_Error
値が空でなければ、それもスレーブのエラー
ログ内に現れます。例:
Last_Errno: 1051 Last_Error: error 'Unknown table 'z'' on query 'drop table z'
このメッセージは、テーブル
z
がマスタ上に存在しそこでドロップされたが、それはスレーブ上には存在しなかった為、スレーブ上で
DROP TABLE
が失敗した、という事を含んでいます。(これは例えば、複製をセットアップする時にテーブルをスレーブにコピーするのを忘れた時に起きます。)
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
関連フィールドの値は、--master-ca
、--master-capath
、--master-cert
、--master-cipher
、そして
--master-key
オプションの値に対応します。
Seconds_Behind_Master
このフィールドは、スレーブがどの程度 「late」 であるかの目安です。
スレーブ SQL スレッドがアクティブに起動している時(更新を実行している時)、このフィールドはスレッドによって実行されたマスタ上の一番最近のイベントのタイム スタンプから経過した秒数を表します。
SQL スレッドがスレーブ I/O スレッドに追いつき、そこからの更なるイベントを待ってアイドル状態になると、このフィールドはゼロになります。
基本的に、このフィールドはスレーブ 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
スレッドが、再接続前に
--master-connect-retry
オプションによって与えられた秒数眠っていたとすると、スレーブはマスタが何をしているか知る事ができないので
NULL
が表示され、その為どの程度遅れているか正確に知る事ができません。
このフィールドには1つ制限があります。タイムスタンプは複製中に維持されますので、これは、もしマスタ
M1 自体が M0 のスレーブだったら、M0
のビンログからのイベントを複製する上で発生したM1のビンログからのイベントは、M0
のイベントのタイムスタンプを持つ、という事を意味します。これは
MySQL が TIMESTAMP
を正常に複製する事を可能にします。しかし、Seconds_Behind_Master
の欠点は、もし M1
もクライアントから直接更新されると、最後の
M1 のイベントは M0
からであったり、直接の更新からの一番最近のタイムスタンプであったりする為、その値はランダムに外れる、という事です。