MySQL5.7以降から、複数のperformance_schemaのテーブルからレプリケーションの情報を確認できるようになりました。今回はそれらのテーブルから確認できる内容や、従来のスレーブの情報を確認するためのコマンドSHOW SLAVE STATUS
との違いなどについて紹介します。MySQLのバージョンはMySQL5.7.17を使用します。
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_THREAD
、applier
を含むテーブル名はSQL_THREAD
の情報が格納されています。そして、group
を含むテーブル名はMySQL5.7.17からGAとなったGroup Replication
の情報が格納されています。
すべてのレプリケーションテーブルの先頭のカラムはCHANNEL_NAME
となっていて、複数のチャンネルに対応したものとなります。このチャンネルというものはMySQL5.7以降から導入された概念でスレーブが1つのマスターを識別する単位(IO_THREAD+Relay_Log+SQL_THREAD)をチャンネルと呼びます。
MySQL5.7以降の機能であるマルチソースレプリケーションでは1つのスレーブが複数のマスターをもつことができます。スレーブはマスターごとにチャンネルを開くことができ、各チャンネルには独自のIO_THREAD、Relay_Logとアプライアースレッド(SQL_THREAD)をもつので、それぞれを独立して機能させることができます。また、チャンネル名を指定せずにレプリケーションを構成した場合、チャンネル名は '' (空文字列)となります。
SHOW SLAVE STATUS
との比較
従来の単一マスター/スレーブ構成であればSHOW SLAVE STATUS
で情報がすべて把握できますが、MySQL5.6以降の機能マルチスレッドスレーブや前述のマルチソースレプリケーションなどを使用していると、以下のような問題があります。レプリケーションテーブルはそれらの問題に対応しています。
- 特定のカラムの情報だけを取得するのが困難
- 取得できる情報が不足
SHOW SLAVE STATUS
の表示が長くなり視認性が悪い
マルチスレッドスレーブ(MTS)
たとえば、slave_parallel_workers=2
のスレーブは2つのワーカースレッドでMTSが稼働しています。このときにSHOW SLAVE STATUS
を確認してもいくつのワーカースレッドが稼働しているかの情報が不足しています。そんなときは、replication_applier_status_by_worker
を見ます。
このようにワーカースレッドが2つが稼働していることがわかり、ワーカースレッドごとの状態を確認することができます。
マルチソースレプリケーション
下記はマルチソースレプリケーションでマスターが2台構成のスレーブで実行したSHOW SLAVE STATUS
の表示です(表示は一部割愛しています)。Channel_Name
の値からchannel1
とchannel2
のチャンネルが存在していることがわかります。
このように表示されるため、チャンネル数が増えていくと視認性が悪くなります。かつ、特定のカラムの情報だけ見たいときもmysqlコマンドのpager
オプションを駆使するなど手間な作業になります。
レプリケーションテーブルを使えば、情報がテーブルごと分割されていて、SQLを使用して特定のカラムを取得することができます。
SHOW SLAVE STATUS
との対応表
これらのレプリケーションテーブルはSHOW SLAVE STATUS
で表示しきれない情報の補填である面が強く、まだまだ情報は乏しいです。SHOW SLAVE STATUS
と対応していないものも多いですが、MySQL5.7.17時点での対応表となります。
SHOW SLAVE STATUSカラム | performance_schemaテーブル | performance_schemaカラム |
Slave_IO_State | 未対応 | 未対応 |
Master_Host | replication_connection_configuration | HOST |
Master_User |
replication_connection_configuration | USER |
Master_Port | replication_connection_configuration | PORT |
Connect_Retry | replication_connection_configuration | CONNECTION_RETRY_INTERVAL |
Master_Log_File | 未対応 | 未対応 |
Read_Master_Log_Pos | 未対応 | 未対応 |
Relay_Log_File | 未対応 | 未対応 |
Relay_Log_Pos | 未対応 | 未対応 |
Relay_Master_Log_File | 未対応 | 未対応 |
Slave_IO_Running | replication_connection_status | SERVICE_STATE |
Slave_SQL_Running | replication_applier_status_by_worker replication_applier_status_by_coordinator | SERVICE_STATE |
Replicate_Do_DB | 未対応 | 未対応 |
Replicate_Ignore_DB | 未対応 | 未対応 |
Replicate_Do_Table | 未対応 | 未対応 |
Replicate_Ignore_Table | 未対応 | 未対応 |
Replicate_Wild_Do_Table | 未対応 | 未対応 |
Replicate_Wild_Ignore_Table | 未対応 | 未対応 |
Last_Errno | 未対応 | 未対応 |
Last_Error | 未対応 | 未対応 |
Skip_Counter | 未対応 | 未対応 |
Exec_Master_Log_Pos | 未対応 | 未対応 |
Relay_Log_Space | 未対応 | 未対応 |
Until_Condition | 未対応 | 未対応 |
Until_Log_File | 未対応 | 未対応 |
Until_Log_Pos | 未対応 | 未対応 |
Master_SSL_Allowed | replication_connection_configuration | SSL_ALLOWED |
Master_SSL_CA_File | replication_connection_configuration |
SSL_CA_FILE |
Master_SSL_CA_Path | replication_connection_configuration | SSL_CA_PATH |
Master_SSL_Cert | replication_connection_configuration | SSL_CERTIFICATE |
Master_SSL_Cipher | replication_connection_configuration | SSL_CIPHER |
Master_SSL_Key | replication_connection_configuration | SSL_KEY |
Seconds_Behind_Master | 未対応 | 未対応 |
Master_SSL_Verify_Server_Cert | replication_connection_configuration | SSL_VERIFY_SERVER_CERTIFICATE |
Last_IO_Errno | replication_connection_status | LAST_ERROR_NUMBER |
Last_IO_Error | replication_connection_status | LAST_ERROR_MESSAGE |
Last_SQL_Errno | replication_applier_status_by_worker replication_applier_status_by_coordinator | LAST_ERROR_NUMBER |
Last_SQL_Error | replication_applier_status_by_worker replication_applier_status_by_coordinator | LAST_ERROR_MESSAGE |
Replicate_Ignore_Server_Ids | 未対応 | 未対応 |
Master_Server_Id | 未対応 | 未対応 |
Master_UUID | replication_connection_status | SOURCE_UUID |
Master_Info_File | 未対応 | 未対応 |
SQL_Delay | replication_applier_configuration | DESIRED_DELAY |
SQL_Remaining_Delay | replication_applier_status | REMAINING_DELAY |
Slave_SQL_Running_State | 未対応 | 未対応 |
Master_Retry_Count | replication_connection_configuration | CONNECTION_RETRY_COUNT |
Master_Bind | replication_connection_configuration | NETWORK_INTERFACE |
Last_IO_Error_Timestamp | replication_connection_status | LAST_ERROR_TIMESTAMP |
Last_SQL_Error_Timestamp | replication_applier_status_by_worker replication_applier_status_by_coordinator | LAST_ERROR_TIMESTAMP |
Master_SSL_Crl | replication_connection_configuration | SSL_CRL_FILE |
Master_SSL_Crlpath | replication_connection_configuration | SSL_CRL_PATH |
Retrieved_Gtid_Set | replication_connection_status | RECEIVED_TRANSACTION_SET |
Executed_Gtid_Set | replication_applier_status_by_worker | LAST_SEEN_TRANSACTION(直近のトランザクション情報のみ) |
Auto_Position | replication_connection_configuration | AUTO_POSITION |
Replicate_Rewrite_DB | 未対応 | 未対応 |
Channel_Name | すべてのテーブル | CHANNEL_NAME |
Master_TLS_Version | 未対応 | 未対応 |
まとめ
今回、performance_schemaのレプリケーションテーブルについて紹介しました。その理由として、MySQL5.7.17からGAとなったGroup Replication
ではレプリケーションの情報をSHOW SLAVE STATUS
で確認することができず、performance_schemaのレプリケーションテーブルを用いてモニタリングしていくことになるためです。今後、変更される可能性もありますが、MySQL5.7.17時点ではそうです。しかし、MySQLを運用している人が最初に確認するであろうカラムSeconds_Behind_Master
がまだ未対応であったり、SHOW SLAVE STATUS
と比べて情報がまだまだ少ないためこれから発展していく機能であると考えられます。