MySQL5.SHOW SLAVE STATUS
との違いなどについて紹介します。MySQLのバージョンはMySQL5.
performance_schemaレプリケーションテーブル一覧
追加されたレプリケーションテーブルの一覧です。
- replication_
connection_ configuration …マスターの接続パラメータ (IO_ THREAD) - replication_
connection_ status …マスターの接続状態 (IO_ THREAD) - replication_
applier_ configuration …アプライアーの情報 (SQL_ THREAD) - replication_
applier_ status …アプライアーの状態 (SQL_ THREAD) - replication_
applier_ status_ by_ coordinator …コーディネータスレッドの情報 - replication_
applier_ status_ by_ worker …ワーカースレッドの情報 - replication_
group_ member_ stats …グループレプリケーションの統計情報 - replication_
group_ members …グループレプリケーションのメンバー情報
connection
を含むテーブル名はIO_
、applier
を含むテーブル名はSQL_
の情報が格納されています。そして、group
を含むテーブル名はMySQL5.Group Replication
の情報が格納されています。
すべてのレプリケーションテーブルの先頭のカラムはCHANNEL_
となっていて、
MySQL5.
SHOW SLAVE STATUS
との比較
従来の単一マスター/スレーブ構成であればSHOW SLAVE STATUS
で情報がすべて把握できますが、
- 特定のカラムの情報だけを取得するのが困難
- 取得できる情報が不足
SHOW SLAVE STATUS
の表示が長くなり視認性が悪い
マルチスレッドスレーブ(MTS)
たとえば、slave_
のスレーブは2つのワーカースレッドでMTSが稼働しています。このときにSHOW SLAVE STATUS
を確認してもいくつのワーカースレッドが稼働しているかの情報が不足しています。そんなときは、replication_
を見ます。
select * from replication_applier_status_by_worker; +--------------+-----------+-----------+---------------+-----------------------+-------------------+--------------------+----------------------+ | CHANNEL_NAME | WORKER_ID | THREAD_ID | SERVICE_STATE | LAST_SEEN_TRANSACTION | LAST_ERROR_NUMBER | LAST_ERROR_MESSAGE | LAST_ERROR_TIMESTAMP | +--------------+-----------+-----------+---------------+-----------------------+-------------------+--------------------+----------------------+ | | 1 | 27 | ON | ANONYMOUS | 0 | | 0000-00-00 00:00:00 | | | 2 | 28 | ON | ANONYMOUS | 0 | | 0000-00-00 00:00:00 | +--------------+-----------+-----------+---------------+-----------------------+-------------------+--------------------+----------------------+
このようにワーカースレッドが2つが稼働していることがわかり、
マルチソースレプリケーション
下記はマルチソースレプリケーションでマスターが2台構成のスレーブで実行したSHOW SLAVE STATUS
の表示ですChannel_
の値からchannel1
とchannel2
のチャンネルが存在していることがわかります。
show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: test Master_Port: 20192 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 7666 Relay_Log_File: mysql-relay-channel1.000002 Relay_Log_Pos: 3834 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0 Retrieved_Gtid_Set: 00020192-1111-1111-1111-111111111111:18-31 Executed_Gtid_Set: 00020192-1111-1111-1111-111111111111:1-31, 00020193-2222-2222-2222-222222222222:1-29 Auto_Position: 1 Replicate_Rewrite_DB: Channel_Name: channel1 Master_TLS_Version: *************************** 2. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: test Master_Port: 20193 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 7444 Relay_Log_File: mysql-relay-channel2.000002 Relay_Log_Pos: 7657 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0 Retrieved_Gtid_Set: 00020193-2222-2222-2222-222222222222:1-29 Executed_Gtid_Set: 00020192-1111-1111-1111-111111111111:1-31, 00020193-2222-2222-2222-222222222222:1-29 Auto_Position: 1 Replicate_Rewrite_DB: Channel_Name: channel2 Master_TLS_Version:
このように表示されるため、pager
オプションを駆使するなど手間な作業になります。
レプリケーションテーブルを使えば、
replication_applier_status_by_worker
select * from replication_applier_status_by_worker; +--------------+-----------+-----------+---------------+-----------------------------------------+-------------------+--------------------+----------------------+ | CHANNEL_NAME | WORKER_ID | THREAD_ID | SERVICE_STATE | LAST_SEEN_TRANSACTION | LAST_ERROR_NUMBER | LAST_ERROR_MESSAGE | LAST_ERROR_TIMESTAMP | +--------------+-----------+-----------+---------------+-----------------------------------------+-------------------+--------------------+----------------------+ | channel1 | 0 | 39 | ON | 00020192-1111-1111-1111-111111111111:31 | 0 | | 0000-00-00 00:00:00 | | channel2 | 0 | 41 | ON | 00020193-2222-2222-2222-222222222222:29 | 0 | | 0000-00-00 00:00:00 | +--------------+-----------+-----------+---------------+-----------------------------------------+-------------------+--------------------+----------------------+
replication_connection_status
select CHANNEL_NAME,SERVICE_STATE,RECEIVED_TRANSACTION_SET,LAST_ERROR_NUMBER from replication_connection_status; +--------------+---------------+--------------------------------------------+-------------------+ | CHANNEL_NAME | SERVICE_STATE | RECEIVED_TRANSACTION_SET | LAST_ERROR_NUMBER | +--------------+---------------+--------------------------------------------+-------------------+ | channel1 | ON | 00020192-1111-1111-1111-111111111111:18-31 | 0 | | channel2 | ON | 00020193-2222-2222-2222-222222222222:1-29 | 0 | +--------------+---------------+--------------------------------------------+-------------------+
SHOW SLAVE STATUS
との対応表
これらのレプリケーションテーブルはSHOW SLAVE STATUS
で表示しきれない情報の補填である面が強く、SHOW SLAVE STATUS
と対応していないものも多いですが、
SHOW SLAVE STATUSカラム | performance_ | performance_ |
---|---|---|
Slave_ | 未対応 | 未対応 |
Master_ | replication_ | HOST |
Master_ |
replication_ | USER |
Master_ | replication_ | PORT |
Connect_ | replication_ | CONNECTION_ |
Master_ | 未対応 | 未対応 |
Read_ | 未対応 | 未対応 |
Relay_ | 未対応 | 未対応 |
Relay_ | 未対応 | 未対応 |
Relay_ | 未対応 | 未対応 |
Slave_ | replication_ | SERVICE_ |
Slave_ | replication_ replication_ | SERVICE_ |
Replicate_ | 未対応 | 未対応 |
Replicate_ | 未対応 | 未対応 |
Replicate_ | 未対応 | 未対応 |
Replicate_ | 未対応 | 未対応 |
Replicate_ | 未対応 | 未対応 |
Replicate_ | 未対応 | 未対応 |
Last_ | 未対応 | 未対応 |
Last_ | 未対応 | 未対応 |
Skip_ | 未対応 | 未対応 |
Exec_ | 未対応 | 未対応 |
Relay_ | 未対応 | 未対応 |
Until_ | 未対応 | 未対応 |
Until_ | 未対応 | 未対応 |
Until_ | 未対応 | 未対応 |
Master_ | replication_ | SSL_ |
Master_ | replication_ |
SSL_ |
Master_ | replication_ | SSL_ |
Master_ | replication_ | SSL_ |
Master_ | replication_ | SSL_ |
Master_ | replication_ | SSL_ |
Seconds_ | 未対応 | 未対応 |
Master_ | replication_ | SSL_ |
Last_ | replication_ | LAST_ |
Last_ | replication_ | LAST_ |
Last_ | replication_ replication_ | LAST_ |
Last_ | replication_ replication_ | LAST_ |
Replicate_ | 未対応 | 未対応 |
Master_ | 未対応 | 未対応 |
Master_ | replication_ | SOURCE_ |
Master_ | 未対応 | 未対応 |
SQL_ | replication_ | DESIRED_ |
SQL_ | replication_ | REMAINING_ |
Slave_ | 未対応 | 未対応 |
Master_ | replication_ | CONNECTION_ |
Master_ | replication_ | NETWORK_ |
Last_ | replication_ | LAST_ |
Last_ | replication_ replication_ | LAST_ |
Master_ | replication_ | SSL_ |
Master_ | replication_ | SSL_ |
Retrieved_ | replication_ | RECEIVED_ |
Executed_ | replication_ | LAST_ |
Auto_ | replication_ | AUTO_ |
Replicate_ | 未対応 | 未対応 |
Channel_ | すべてのテーブル | CHANNEL_ |
Master_ | 未対応 | 未対応 |
まとめ
今回、Group Replication
ではレプリケーションの情報をSHOW SLAVE STATUS
で確認することができず、Seconds_
がまだ未対応であったり、SHOW SLAVE STATUS
と比べて情報がまだまだ少ないためこれから発展していく機能であると考えられます。