管理複製程序時,最常見的任務是確保複製正在進行,並且副本和來源之間沒有錯誤。
SHOW REPLICA STATUS
陳述式(您必須在每個副本上執行)提供有關副本伺服器和來源伺服器之間連線的組態和狀態的資訊。MySQL Performance Schema 包含以更容易存取的形式提供此資訊的複製資料表。請參閱第 29.12.11 節,「Performance Schema 複製資料表」。
效能綱要(Performance Schema)複寫表格中顯示的複寫心跳資訊,可讓您檢查複寫連線是否處於活動狀態,即使來源最近沒有傳送事件到複本。如果二進位日誌在心跳間隔的較長時間內沒有更新,也沒有未傳送的事件,則來源會傳送心跳訊號到複本。來源上的 SOURCE_HEARTBEAT_PERIOD
設定(由 CHANGE REPLICATION SOURCE TO
設定)指定心跳的頻率,預設為複本連線逾時間隔的一半(由系統變數 replica_net_timeout
指定)。replication_connection_status
效能綱要表格顯示複本接收到最近一次心跳訊號的時間,以及它已接收到多少個心跳訊號。
您可以使用 SHOW REPLICA STATUS
來檢查個別複本的狀態;此語句提供此處顯示的資訊
mysql> SHOW REPLICA STATUS\G
*************************** 1. row ***************************
Replica_IO_State: Waiting for source to send event
Source_Host: 127.0.0.1
Source_User: root
Source_Port: 13000
Connect_Retry: 1
Source_Log_File: master-bin.000001
Read_Source_Log_Pos: 927
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 1145
Relay_Source_Log_File: master-bin.000001
Replica_IO_Running: Yes
Replica_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_Source_Log_Pos: 927
Relay_Log_Space: 1355
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Source_SSL_Allowed: No
Source_SSL_CA_File:
Source_SSL_CA_Path:
Source_SSL_Cert:
Source_SSL_Cipher:
Source_SSL_Key:
Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Source_Server_Id: 1
Source_UUID: 73f86016-978b-11ee-ade5-8d2a2a562feb
Source_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
Source_Retry_Count: 10
Source_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Source_SSL_Crl:
Source_SSL_Crlpath:
Retrieved_Gtid_Set: 73f86016-978b-11ee-ade5-8d2a2a562feb:1-3
Executed_Gtid_Set: 73f86016-978b-11ee-ade5-8d2a2a562feb:1-3
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Source_TLS_Version:
Source_public_key_path:
Get_Source_public_key: 0
Network_Namespace:
要檢查的狀態報告中的主要欄位為
Replica_IO_State
:複本的目前狀態。如需更多資訊,請參閱 第 10.14.5 節,「複寫 I/O (接收器) 線程狀態」 和 第 10.14.6 節,「複寫 SQL 線程狀態」。Replica_IO_Running
:用於讀取來源二進位日誌的 I/O(接收器)線程是否正在執行。通常,您會希望此值為Yes
,除非您尚未開始複寫,或已使用STOP REPLICA
明確停止它。Replica_SQL_Running
:用於執行中繼日誌中事件的 SQL 線程是否正在執行。與 I/O 線程一樣,此值通常應為Yes
。Last_IO_Error
、Last_SQL_Error
:I/O(接收器)和 SQL(應用程式)線程在處理中繼日誌時記錄的最後錯誤。理想情況下,這些應該為空白,表示沒有錯誤。Seconds_Behind_Source
:複寫 SQL(應用程式)線程在處理來源二進位日誌時落後的秒數。較高的數字(或遞增的數字)可能表示複本無法及時處理來自來源的事件。Seconds_Behind_Source
的值為 0 通常可以解釋為複本已趕上來源,但在某些情況下,這並不完全正確。例如,如果來源和複本之間的網路連線中斷,但複寫 I/O(接收器)線程尚未注意到這一點,就可能發生這種情況;也就是說,replica_net_timeout
設定的時間段尚未過去。Seconds_Behind_Source
的暫時值也可能無法準確反映情況。當複寫 SQL(應用程式)線程趕上 I/O 時,Seconds_Behind_Source
會顯示 0;但是當複寫 I/O(接收器)線程仍在佇列新事件時,Seconds_Behind_Source
可能會顯示較大的值,直到複寫應用程式線程完成執行新事件。當事件具有舊的時間戳記時,尤其如此;在這種情況下,如果您在相對較短的時間內執行SHOW REPLICA STATUS
幾次,您可能會看到此值在 0 和相對較大的值之間來回重複變化。
有幾對欄位提供關於複本從來源二進位日誌讀取事件並在中繼日誌中處理這些事件的進度資訊
(
Master_Log_file
、Read_Master_Log_Pos
):來源二進位日誌中的座標,指示複寫 I/O(接收器)線程從該日誌讀取事件的進度。(
Relay_Master_Log_File
、Exec_Master_Log_Pos
):來源二進位日誌中的座標,指示複寫 SQL(應用程式)線程已執行從該日誌接收的事件的進度。(
Relay_Log_File
、Relay_Log_Pos
):複本中繼日誌中的座標,指示複寫 SQL(應用程式)線程已執行的中繼日誌進度。這些對應於先前的座標,但以複本中繼日誌座標而不是來源二進位日誌座標表示。
在來源上,您可以使用 SHOW PROCESSLIST
來檢查已連線複本的狀態,以檢查正在執行的程序清單。複本連線在 Command
欄位中具有 Binlog Dump
mysql> SHOW PROCESSLIST \G;
*************************** 4. row ***************************
Id: 10
User: root
Host: replica1:58371
db: NULL
Command: Binlog Dump
Time: 777
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL
由於複寫程序是由複本驅動的,因此在此報告中可用的資訊非常少。
對於使用 --report-host
選項啟動且已連線到來源的複本,來源上的 SHOW REPLICAS
語句會顯示有關複本的基本資訊。輸出包括複本伺服器的 ID、--report-host
選項的值、連線埠和來源 ID
mysql> SHOW REPLICAS;
+-----------+----------+------+-------------------+-----------+
| Server_id | Host | Port | Rpl_recovery_rank | Source_id |
+-----------+----------+------+-------------------+-----------+
| 10 | replica1 | 3306 | 0 | 1 |
+-----------+----------+------+-------------------+-----------+
1 row in set (0.00 sec)