管理複製程序時最常見的工作是確保正在進行複製,並且副本和來源之間沒有發生錯誤。
SHOW REPLICA STATUS
陳述式 (您必須在每個副本上執行) 提供副本伺服器和來源伺服器之間連線的組態和狀態資訊。MySQL 效能結構描述包含以更容易存取的形式提供此資訊的複製資料表。請參閱 第 29.12.11 節,「效能結構描述複製資料表」。
效能結構描述複製資料表中顯示的複製檢測訊號資訊可讓您檢查複製連線是否為作用中,即使來源最近沒有傳送事件至副本。如果二進位日誌中在比檢測訊號間隔長的時間內沒有更新,也沒有未傳送的事件,來源會傳送檢測訊號至副本。來源上的 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)