219_mysql_復制技術_檢查復制信息_performance_schema庫_show slave status
九 通過performance_schema庫檢查復制信息
Performance_schema下面 replication開頭的表提供了復制機制的配置和狀態信息
Replication_applier_configuration
記錄從庫延遲復制的配置參數
Replication_applier_status
記錄從庫的普通事務執行狀態(復制組中的復制狀態信息)
Replication_applier_status_by_coordinator
使用多線程復制, 記錄coordinator線程的工作狀態
Replication_applier_status_by_worker
單線程則記錄一條worker_id=0; 如果多線程記錄 worker線程狀態
Replication_connection_configuration
記錄從庫用于連接到主庫的配置信息
Replication_connection_status
記錄從庫I/O線程的連接狀態信息
Replication_group_member_stats
記錄復制組成員的事務狀態信息
Replication_group_members
記錄組復制成員的網絡和狀態信息
上訴表記錄的生命周期
Change master to 之前
空表
Change master to 之后
Replication_applier_configuration和replication_connection_configuration可以看到配置信息
由于沒有thread啟動, 表中 thread_id 為null, service_state 為off
Start slave 之后
相應的復制線程開始運行,會更新相關狀態; thread_id會被分配(thread表中查看,與 show processlist 中ID 有不同, 對應 thread表中PROCESSLIST_ID )
Stop slave之后
所有的復制I/O, coordinator線程 WORKER線程表中, thread_id字段均為NULL,service_state字段為OFF
停止后 這些記錄不會清理, 重啟時獲取其狀態信息用于排錯
RESET SLAVE
所有復制記錄的配置和狀態信息清理(磁盤)包括Mysql.slave_master_info & Mysql.slave_relay_log_info
但未清理內存,show slave status仍然會看到相關信息,如果徹底清理 reset slave all
9.1 performance_schema & Show slave status 之間的差異
1 Performance_schema 表中復制信息基于GTID(serverUUID, 而不是server id非binlog)所以 show slave status 中引用binlog的信息不會有
Show slave status 有;但performance_schema下面表不記錄 1.1 Master_log_file; read_master_log_pos; # 主/從庫配置保存信息 relay_log_file; relay_log_pos; relay_master_log_file; exec_master_log_pos; until_condition; until_log_file; until_log_pos 1.2 master_info_file 記錄主從配置保存方式 performance_schema不記錄;默認是 master.info, 如果table級 mysql.slave_master_info 1.3 基于server id :master_server_id;Replicate_Ignore_Server_Ids 1.4 skip_counter 字段基于事件而不是 GTID基數 1.5 last_errno & last_error 是 last_sql_errno & last_sql_error字段別名 1.6 過濾復制字段不記錄: Replicate_Ignore_DB; Replicate_Do_Table Replicate_Ignore_Table,Replicate_Wild_Do_Table,Replicate_Wild_Ignore_Table 1.7 slave_io_state & slave_io_running 不記錄 SELECT state as io_thread_state , id as process_id, pr.thread_id from `performance_schema`.replication_connection_status as pr join information_schema.`PROCESSLIST` as ip on pr.thread_id = sys.ps_thread_id(ip.id) Sys.ps_thread_id() 傳入一個process id 返回一個 thread id 1.8 seconds_behind_master和 relay_log_space 不記錄
2 performance_schema庫中的復制信息詳解
2.1 replication_applier_configuration 表 記錄從庫延遲復制的配置參數,延遲復制的線程被稱為普通線程;
select * from replication_applier_configuration CHANNEL_NAME: # 鏈路名稱:用來在多鏈路復制時區分不同的鏈路,默認空字符串 對應 Channel_name DESIRED_DELAY #主從延遲:用來設置復制過程中設置的主從延遲,默認為0不延遲 # 對應SQL_Delay
2.2 replication_applier_status 表 記錄當前從庫的普通事務執行狀態(也記錄組復制架構中的復制狀態信息)
replication_applier_status 字段
含義
對應 show slave status
CHANNEL_NAME
顯示復制渠道名稱
Channel_Name
SERVICE_STATE
On: 從庫處于活躍/空置狀態
Off: 從庫處于非活躍狀態
無
REMAINING_DELAY
主有變化,還剩多少時間到從;
SQL_Remaining_Delay
COUNT_TRANSACTIONS_RETRIES
從庫SQL線程無法應用事務而進行重試的次數
無
2.3 replication_applier_status_by_coordinator表 slave多線程時Coordinator線程工作狀態
replication_applier_status_by_coordinator 字段
含義
對應 show slave status
CHANNEL_NAME
顯示復制渠道名稱
Channel_Name
THREAD_ID
該通道下,slave coordinator線程ID
SERVICE_STATE
On: 從庫處于活躍/空置狀態
Off: 從庫處于非活躍狀態
Slave_sql_running
LAST_ERROR_NUMBER
LAST_ERROR_MESSAGE
Slave coordinator線程發生錯誤而停止的最新錯誤編號; reset master&slave 該值會被重置
0 無錯誤, message 為空
非0, 輸出錯誤信息
LAST_SQL_Errno
LAST_SQL_Error
LAST_ERROR_TIMESTAMP
發生錯誤時間:YYMMDD HH:MM:SS
Last_SQL_Error_Timestamp
2.4 replication_applier_status_by_worker表 slave多線程時 sql/worker線程工作狀態
如果多線程復制 slave_replication_workes=N 指定N個數量的worker線程(1開始編號),
如果是MGR集群會有N個 group_application_applier 和1個 group_replication_recovery
replication_applier_status_by_worker字段
含義
對應 show slave status
CHANNEL_NAME
顯示復制渠道名稱
Channel_Name
THREAD_ID
該通道下,slave worker線程ID
SERVICE_STATE
On: 從庫 worker線程處于活躍/空置狀態
Off: 從庫 worker線程處于非活躍狀態
Slave_sql_running
LAST_SEEN_TRAN_SACTION
Worker線程正在執行的事務號,GTID
如果 gtid_mode off 該字段為ANONYMOUS
如果空閑 為空串
如果執行過事務后空閑 為最后一次的GTID
如果發生錯誤/最后一次GTID 會被coordinator捕獲,該通道下SQL線程都會被暫停
LAST_ERROR_NUMBER
LAST_ERROR_MESSAGE
Slave coordinator線程發生錯誤而停止的最新錯誤編號; reset master&slave 該值會被重置
0 無錯誤, message 為空
非0, 輸出錯誤信息
單線程會顯示
LAST_SQL_Errno LAST_SQL_Error
多線程不顯示,顯示coordinator的錯誤編號&信息
LAST_ERROR_TIMESTAMP
發生錯誤時間:YYMMDD HH:MM:SS
Last_SQL_Error_Timestamp
2.5 replication_connection_configuration表 記錄slave連接master配置參數-change master to時更新 使用頻率較低
replication_connection_configuration
含義
Change Master to
CHANNEL_NAME
顯示復制渠道名稱
Channel_Name
HOST/PORT/USER
Ip主機名/端口/用戶名
MASTER_HOST; MASTER_PORT; MASTER_USER;
NETWORK_INTERFACE
Master實例網卡名稱
MASTER_BIND
Auto_position
是否開啟自動定位 1 開啟; 0 關閉
MASTER_AUTO_POSITION
SSL_ALLOWED
是否開啟SSL連接,YES/NO
MASTER_SSL
SSL_CA_FILE; SSL_CA_PATH 等
Master使用CA證書和秘鑰
MASTER_SSL_CA; MASTER_SSL_CPATH;
Connection_retry_interval
主從丟連接后 隔多少秒重試一次
MASTER_CONNECTION_RETRY
CONNECTION_RETRY_COUNT
重試連接主庫次數
MASTER_RETRY_COUNT
HEARTBEAT_INTERVAL
Slave連master的IO線程的心跳包的間隔時間, 單位S
MASTER_HEARTBEAT_PERIOD
2.6 replication_connection_status? 表記錄slave I/O線程的連接狀態信息, 也記錄組復制中其它節點連接信息
replication_connection_status
含義
Change Master to
CHANNEL_NAME
顯示復制渠道名稱
Channel_Name
GROUP_NAME
如果是組復制,顯示所屬組名字
無
SOURCE UUID
Slave連接 master 的 server_uuid
MASTER_UUID
THREAD_ID
I/O 線程ID
無
SERVICE_STATE
On: 從庫 I/O線程處于活躍/空置狀態
Off: 從庫 I/O線程處于非活躍狀態
CONNECTING I/O嘗試連接master
SLAVE_IO_RUNNING
RECEIVED_TRANSACTION_SET
Slave 接收到Master對應的GTID SET
Retrieved_Gtid_Set
LAST_ERROR_NUMBER
LAST_ERROR_MESSAGE
Slave coordinator線程發生錯誤而停止的最新錯誤編號; reset master&slave 該值會被重置
0 無錯誤, message 為空
非0, 輸出錯誤信息
LAST_SQL_Errno
LAST_SQL_Error
LAST_ERROR_TIMESTAMP
發生錯誤時間:YYMMDD HH:MM:SS
Last_SQL_Error_Timestamp
LAST_ HEARTBEAT _TIMESTAMP
Slave I/O線程最后一次收到master心跳信號的時間 YYMMDD HH:MM:SS
無
COUNT_REVEIVED_HEARTBEATS
Slave收到 master的總次數
無
2.7 replication_group_member_stats 表記錄組復制成員的事務狀態統計信息,僅在組復制中有效
Channel_name
組成員所在組使用的復制通道:group_replication_applier
View_ID
組成員所在組的當前試圖標識符
Member_ID
組成員server的UUID, 全局唯一
COUNT_TRANSACTIONS_IN_QUEUE
隊列中等待沖突檢查的事務數(全局事務認證)
COUNT_TRANSACTIONS_CHECKED
表示已通過沖突檢查的事務數(全局事務認證)
COUNT_TRANSACTIONS_ROW_VAILDATING
沖突檢測數據庫當前的大小
TRANSACTIONS_COMMITED_ALL_MEMBERS
顯示當前所有成員成功提交的事務
LAST_CONFLICT_FREE_TRANSACTION
顯示最后一次無沖突檢查的事務表示符(最后一次沒有沖突的GTID)
2.8 replication_group_members 表 組復制成員的網絡和狀態信息
Channel_Name
組成員所在組使用的復制通道:group_replication_applier
MEMBER_ID
顯示當前組成員server的UUID,全局唯一
MEMBER_HOST
組復制中組成員的網絡地址(主機名/IP)
MEMBER_PORT
組復制中組成員的監聽端口,
MEMBER_STATE
組復制中組成員的狀態
Offline:組復制成員已經安裝組復制插件,但未啟動
RECOVERING: 組復制成員已經加入復制組,正在從組中接收數據,正在加入集群
Online: 組復制成員處于正常運行狀態
十 通過其它方式檢查復制信息
10.1 Show slave status 語句輸出詳解
Slave_IO_State: 顯示IO線程正在做什么 Master_Host: 192.168.1.100 Master_User: mysync Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.001822 Read_Master_Log_Pos: 290072815 Relay_Log_File: mysqld-relay-bin.005201 Relay_Log_Pos: 256529594 Relay_Master_Log_File: mysql-bin.001821 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 256529431 Relay_Log_Space: 709504534 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: 2923 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 13ee75bb-99e2-11e6-be4d-b499baa80e6e Master_Info_File: /home/data/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Reading event from the relay log Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0
Slave_IO_state 1) waiting for master update: 這是connecting to master狀態之前的狀態 2) connecting to master: I/O線程正嘗試連接到master 3) checking master version: 在與master建立連接后,會出現該狀態。該狀態出現的時間非常短暫。 4) registering slave on master:在與master建立連接后,會出現該狀態。該狀態出現的時間非常短暫。 5) requesting binlog dump: 在與master建立連接后,會出現該狀態。在這個狀態下,I/O線程向master發送請求,請求binlog,位置從指定的binglog 名字和binglog的position位置開始 6) waiting to reconnect after a failed binlog dump request:如果因為連接斷開,導致binglog的請求失敗,I/O線程會進入睡眠狀態。然后定期嘗試重連。嘗試重連的時間間隔,可以使用命令"change master to master_connect_trt=X;"改變。 7) reconnecting after a failed binglog dump request: I/O進程正在嘗試連接master 8) waiting for master to send event: 說明,已經成功連接到master,正等待二進制日志時間的到達。如果master 空閑,這個狀態會持續很長時間。如果等待的時間超過了slave_net_timeout(單位是秒)的值,會出現連接超時。在這種狀態下,I/O線程會人為連接失敗,并開始嘗試重連 9) queueing master event to the relay log: 此時,I/O線程已經讀取了一個event,并復制到了relay log 中。這樣SQL 線程可以執行此event 10) waiting to reconnect after a failed master event read: 讀取時出現的錯誤(因為連接斷開)。在嘗試重連之前,I/O線程進入sleep狀態,sleep的時間是master_connect_try的值(默認是60秒) 11) reconnecting after a failed master event read: I/O線程正嘗試重連master。如果連接建立,狀態會變成"waiting for master to send event" 12) waiting for the slave sql thread to free enough relay log space: 這是因為設置了relay_log_space_limit,并且relay log的大小已經整張到了最大值。I/O線程正在等待SQL線程通過刪除一些relay log,來釋放relay log的空間 13) waiting for slave mutex on exit: I/O線程停止時會出現的狀態,出現的時間非常短
1. Slave_IO_State
這里顯示了當前slave I/O線程的狀態(slave連接到master的狀態)。狀態信息和使用show processlist | grep "system user"(會顯示兩條信息,一條slave I/O線程的,一條是slave SQL線程的)顯示的內容一樣。
2. Master_Host
mysql主庫的ip地址
Change master to 語句中 MASTER_HOST選項
3. Master_User
master上面的一個用戶。用來負責主從復制的用戶,創建主從復制的時候建立的(具有reolication slave權限)
Change master to 語句中 MASTER_USER選項
4. Master_Port
master服務器的端口
Change master to 語句中 MASTER_PORT選項
5. Connect_Retry
連接中斷后,重新嘗試連接的時間間隔。默認值是60秒
Change master to master_connect_retry 設置
Slave_net_timeout = 60s 控制超時
#與master相關的日志的信息
6. Master_Log_File
當前I/O線程正在讀取的主服務器二進制日志文件的名稱
Change master to 中的 master_log_file 來指定
7. Read_Master_Log_Pos
當前I/O線程正在讀取的二進制日志的位置
Change master to 語句中 master_log_pos 來指定
#與relay log相關的信息
8. Relay_Log_File
當前slave SQL線程正在讀取并執行的relay log的文件名
Change master to? relay_log_file 來指定文件名
9. Relay_Log_Pos
當前slave SQL線程正在讀取并執行的relay log文件中的位置;(Relay_Log_File下的Relay_Log_Pos其實一一對應著Relay_Master_Log_File的Exec_Master_Log_Pos。)
Change master to xxx relay_log_pos 指定
10. Relay_Master_Log_File
Slave sql線程重放對應 master binlog 文件名
#slave I/O和SQL線程的狀態(重要)
11. Slave_IO_Running
I/O線程是否被啟動并成功地連接到主服務器上
三種狀態
No: 從庫I/O線程沒有運行, 對應內部mysql_slave_not_run
Connecting: I/O運行 但未連接到master 對應內部 mysql_slave_run_not_connect狀態
Yes: I/O線程運行且連接到主庫,mysql_slave_run_connect
12. Slave_SQL_Running
SQL線程是否被啟動
Yes / No 兩種狀態
13. Replicate_Do_DB
Replicate_Ignore_DB
Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
這些參數都是為了用來指明哪些庫或表在復制的時候不要同步到從庫,但是這些參數用的時候要小心,因為 當跨庫使用的時候 可能會出現問題。
一般情況下 ,限制的時候都用Replicate_Wild_Ignore_Table這個參數
14. Last_Errno
Last_Error
slave的SQL線程讀取日志參數的的錯誤數量和錯誤消息。錯誤數量為0并且消息為空字符串表示沒有錯誤。
如果Last_Error值不是空值,它也會在從屬服務器的錯誤日志中作為消息顯示。
執行 reset master 和 reset slave 會重置這兩列
15. Skip_Counter
SQL_SLAVE_SKIP_COUNTER的值,用于設置跳過sql執行步數
系統變量 sql_slave_skip_counter當前的設置值
16. Exec_Master_Log_Pos
slave SQL線程當前執行的事件,對應在master相應的二進制日志中的position
結合Relay_Master_Log_File理解,而且在Relay_Master_Log_File這個值等于Master_Log_File值的時候,Exec_Master_Log_Pos是不可能超過Read_Master_Log_Pos的
17. Relay_Log_Space
所有原有的中繼日志結合起來的總大小。
18. Until_Condition:
Until_Log_File:
Until_Log_Pos: 0
在START SLAVE語句的UNTIL子句中指定的值
Until_Condition具有以下值:
1) None 沒有指定UNTIL子句,則沒有值
2) Master從屬服務器正在讀取,直到達到主服務器的二進制日志的給定位置為止
3) Relay從屬服務器正在讀取,直到達到其中繼日志的給定位置為止,則值為
Until_Log_File和Until_Log_Pos用于指示日志文件名和位置值。日志文件名和位置值定義了SQL線程在哪個點中止執行
4) sql_before_gtids :SQL線程執行事務直到GTID SET 中列出的第一個事務為止
5) sql_after_gtids :直到最后一個事務為止
6) sql_after_mts_gaps: 直到中繼日志找不到更多日志組間隙為止
19.
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Master_SSL_Verify_Server_Cert: No
Master_SSL_Crl:
Master_SSL_Crlpath:
這些字段顯示了被從屬服務器使用加密相關的參數。這些參數用于連接主服務器
Master_SSL_Allowed具有以下值:
1) 如果允許對主服務器進行SSL連接,則值為Yes
2) 如果不允許對主服務器進行SSL連接,則值為No
3) 如果允許SSL連接,但是從屬服務器沒有讓SSL支持被啟用,則值為Ignored。
與SSL有關的字段的值對應于–master-ca,–master-capath,–master-cert,–master-cipher和–master-key選項的值。
20. seconds_Behind_Master
這個值是時間戳的差值。是slave當前的時間戳和master記錄該事件時的時間戳的差值
單位 S
21. Last_IO_Errno:
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
最后一次I/O線程或者SQL線程的錯誤號和錯誤消息
多線程復制, last_sql_error 對應performance_schema.repliacation_applier_status_by_coordinator 中last_error_message列
22. Replicate_Ignore_Server_Ids
主從復制,從庫忽略的主庫服務器Id號。就是不以這些服務器Id為主庫
使用多源復制時候,忽略哪些主庫,
Replicate_ignore_server_ids: 3,6,9
23.
Master_Server_Id
Master_UUID
Master_Info_File
分別表示主庫服務器id號,
主庫服務器的UUID號,
從庫中保存主庫服務器相關的目錄位置
Master_info_file 用于保存I/O線程信息 master.info文件位置,
File類型:一個路徑
Table 類型:mysql.slave_master_info 表
24. SQL_Delay
一個非負整數,表示秒數,Slave滯后多少秒于master
25. SQL_Remaining_Delay
當 Slave_SQL_Running_State 等待,直到MASTER_DELAY秒后,Master執行的事件,此字段包含一個整數,表示有多少秒左右的延遲。在其他時候,這個字段是NULL
延遲從庫時候使用,防止邏輯刪除
26. Slave_SQL_Running_State
SQL線程運行狀態; 與slave_io_state類似,顯示
Show processlist語句中 SQL線程狀態的副本信息
SQL線程運行狀態:
1) Reading event from the relay log
線程已經從中繼日志讀取一個事件,可以對事件進行處理了
2) Has read all relay log; waiting for the slave I/O thread to update it
線程已經處理了中繼日志文件中的所有事件,現在正等待I/O線程將新事件寫入中繼日志
3) Waiting for slave mutex on exit
線程停止時發生的一個很簡單的狀態
27. Master_Retry_Count
連接主庫失敗最多的重試次數
默認是 24 * 3600 =? 86400次 ?master_retry_count指定
28. Master_Bind
slave從庫在多網絡接口的情況下使用,以確定用哪一個slave網絡接口連接到master
Change master to 中 master_bind 指定網卡名稱
29.
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp
最后一次I/O線程或者SQL線程錯誤時的時間戳
格式 YYMMDD HH:MM:SS
#GTID模式相關
30. Retrieved_Gtid_Set
Slave收到的所有事物對應的GTID
該字段的 GTID SET 中最大的GTID值與中繼日志最大的GTID值相對應,
執行 reset slave & change master to 會導致中繼日志被清除
31.Executed_Gtid_Set
Slave 在自己的binlog 中寫入的 GTID SET (執行過的GTID
32 auto_position
如果開啟自動定位則為1 ,否則為0
33 replicate_rewrite_db
主庫上的db名在從庫重放是被指定到另一個db名下
Change replication replicate_rewrite_db=((db1,db2),(db3,db4))
Db1 寫入db3, db2 寫入db4
34 channle_name
默認的復制通道名稱,如果沒有多源復制,該字段為空
35 Master_TLS_Version
Master上 TLS版本
5.7.10新增的選項
10.2 show master status
File
master庫當前正在使用binlog文件名
Position
Master 當前使用binlog的位置
Binlog_do_bd
主庫當前生效的復制規律參數,只有該選項指定的庫列表中的庫寫入數據時, 才會被記錄到binlog中
Binlog_ignore_db
主庫當前生效的復制過濾參數, 該參數指定的庫列表中的庫發生數據寫入,不會被記錄到binlog中
Executed_gtid_set
啟用GTID時, executed_gtid_set 顯示主庫上數據當前的GTID set , 與系統變量 gtid_executed值 以及 show slave status的語句輸出的 Executed_gtid_set字段相同
10.3 show slave hosts 語句 顯示當前主庫所連接的從庫列表
Server_id
從庫的server_id 全局唯一
Host
從庫的主機名,可使用IP地址
User/ Passwrod/
從庫連接主庫的用戶名/密碼/端口號
Master_id
表當前從庫從哪個主庫進行復制
Slave_UUID
全局唯一UUID,啟動自動生成, auto.cnf下保存
MySQL SQL 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。