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と比べて情報がまだまだ少ないためこれから発展していく機能であると考えられます。