SHOW REPLICA STATUS [FOR CHANNEL channel]
此陳述式提供複本執行緒基本參數的狀態資訊。此陳述式需要 REPLICATION CLIENT
權限 (或已棄用的 SUPER
權限)。
SHOW REPLICA STATUS
是非阻塞的。當與 STOP REPLICA
同時執行時,SHOW REPLICA STATUS
會立即返回,而不會等待 STOP REPLICA
完成關閉複製 SQL (應用) 線程或複製 I/O (接收) 線程(或兩者)。這允許在監控和其他應用程式中使用,在這些應用程式中,從 SHOW REPLICA STATUS
獲得立即回應比確保它返回最新數據更重要。
如果您使用 mysql 客戶端發出此語句,您可以使用 \G
語句終止符,而不是分號,以獲得更具可讀性的垂直佈局。
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:
效能模式 (Performance Schema) 提供了公開複製資訊的表格。這與 SHOW REPLICA STATUS
語句提供的資訊相似,但以表格形式呈現。有關詳細資訊,請參閱 第 29.12.11 節,「效能模式複製表格」。
您可以為 CHANGE REPLICATION SOURCE TO
語句設定 GTID_ONLY
選項,以停止複製通道在複製元數據儲存庫中持久化檔案名稱和檔案位置。使用此設定,來源二進制日誌檔案和中繼日誌檔案的檔案位置會在記憶體中追蹤。 SHOW REPLICA STATUS
語句在正常使用時仍會顯示檔案位置。但是,由於檔案位置並未在連線元數據儲存庫和應用程式元數據儲存庫中定期更新(少數情況除外),如果伺服器重新啟動,它們很可能會過時。
對於伺服器啟動後具有 GTID_ONLY
設定的複製通道,來源二進制日誌檔案的讀取和應用檔案位置(Read_Source_Log_Pos
和 Exec_Source_Log_Pos
)會設定為零,而檔案名稱(Source_Log_File
和 Relay_Source_Log_File
)會設定為 INVALID
。中繼日誌檔案名稱 (Relay_Log_File
) 根據 relay_log_recovery 設定,設定為伺服器啟動時建立的新檔案或存在的第一個中繼日誌檔案。檔案位置 (Relay_Log_Pos
) 設定為位置 4,並使用 GTID 自動跳過來跳過檔案中已應用任何交易。
當接收線程聯繫來源並取得有效的位置資訊時,讀取位置 (Read_Source_Log_Pos
) 和檔案名稱 (Source_Log_File
) 會使用正確的資料更新並變為有效。當應用程式線程應用來源中的交易或跳過已執行的交易時,已執行的位置 (Exec_Source_Log_Pos
) 和檔案名稱 (Relay_Source_Log_File
) 會使用正確的資料更新並變為有效。中繼日誌檔案位置 (Relay_Log_Pos
) 也會在該時間更新。
以下列表描述了 SHOW REPLICA STATUS
返回的欄位。有關解釋其含義的更多資訊,請參閱 第 19.1.7.1 節,「檢查複製狀態」。
Replica_IO_State
副本 I/O (接收) 線程的
SHOW PROCESSLIST
輸出的State
欄位的副本。這會告訴您線程正在執行的操作:嘗試連線到來源、等待來源的事件、重新連線到來源等等。如需可能狀態的列表,請參閱 第 10.14.5 節,「複製 I/O (接收) 線程狀態」。Source_Host
副本連線到的來源主機。
Source_User
用於連線到來源的帳戶的使用者名稱。
Source_Port
用於連線到來源的埠。
Connect_Retry
連線重試之間的秒數(預設值為 60)。可以使用
CHANGE REPLICATION SOURCE TO
語句設定。Source_Log_File
I/O (接收) 線程目前正在從中讀取的來源二進制日誌檔案的名稱。對於伺服器啟動後具有
GTID_ONLY
設定的複製通道,這會設定為INVALID
。當副本聯繫來源時,它將會更新。Read_Source_Log_Pos
I/O (接收) 線程已讀取到目前來源二進制日誌檔案中的位置。對於伺服器啟動後具有
GTID_ONLY
設定的複製通道,這會設定為零。當副本聯繫來源時,它將會更新。Relay_Log_File
SQL (應用) 線程目前正在從中讀取和執行的中繼日誌檔案的名稱。
Relay_Log_Pos
SQL (應用) 線程已讀取和執行到目前中繼日誌檔案中的位置。
Relay_Source_Log_File
包含 SQL (應用) 線程執行的最新事件的來源二進制日誌檔案的名稱。對於伺服器啟動後具有
GTID_ONLY
設定的複製通道,這會設定為INVALID
。當交易執行或跳過時,它將會更新。Replica_IO_Running
複製 I/O (接收) 線程是否已啟動並已成功連線到來源。在內部,此線程的狀態由以下三個值之一表示
MYSQL_REPLICA_NOT_RUN. 複製 I/O (接收) 線程未執行。對於此狀態,
Replica_IO_Running
為No
。MYSQL_REPLICA_RUN_NOT_CONNECT. 複製 I/O (接收) 線程正在執行,但未連線到複製來源。對於此狀態,
Replica_IO_Running
為Connecting
。MYSQL_REPLICA_RUN_CONNECT. 複製 I/O (接收) 線程正在執行,並且已連線到複製來源。對於此狀態,
Replica_IO_Running
為Yes
。
Replica_SQL_Running
複製 SQL (應用) 線程是否已啟動。
Replicate_Do_DB
,Replicate_Ignore_DB
使用
--replicate-do-db
和--replicate-ignore-db
選項或CHANGE REPLICATION FILTER
語句指定的任何資料庫名稱。如果使用了FOR CHANNEL
子句,則會顯示通道特定的複製篩選器。否則,會顯示每個複製通道的複製篩選器。Replicate_Do_Table
,Replicate_Ignore_Table
,Replicate_Wild_Do_Table
,Replicate_Wild_Ignore_Table
使用
--replicate-do-table
、--replicate-ignore-table
、--replicate-wild-do-table
和--replicate-wild-ignore-table
選項或CHANGE REPLICATION FILTER
語句指定的任何表格名稱。如果使用了FOR CHANNEL
子句,則會顯示通道特定的複製篩選器。否則,會顯示每個複製通道的複製篩選器。Last_Errno
,Last_Error
這些欄位是
Last_SQL_Errno
和Last_SQL_Error
的別名。發出
RESET BINARY LOGS AND GTIDS
或RESET REPLICA
會重設這些欄位中顯示的值。注意當複製 SQL 線程收到錯誤時,它會先報告錯誤,然後停止 SQL 線程。這表示在
SHOW REPLICA STATUS
顯示Last_SQL_Errno
的非零值時,即使Replica_SQL_Running
仍顯示Yes
,也有一小段時間窗口。Skip_Counter
sql_replica_skip_counter
系統變數的目前值。Exec_Source_Log_Pos
複製 SQL 線程已讀取和執行到目前來源二進制日誌檔案中的位置,標記要處理的下一個交易或事件的開始。對於伺服器啟動後具有
GTID_ONLY
設定的複製通道,這會設定為零。當交易執行或跳過時,它將會更新。當從現有的副本啟動新的副本時,您可以使用此值以及
CHANGE REPLICATION SOURCE TO
語句的SOURCE_LOG_POS
選項,以便新的副本從此點開始讀取。來源的二進制日誌中的 (Relay_Source_Log_File
,Exec_Source_Log_Pos
) 所提供的座標對應於中繼日誌中的 (Relay_Log_File
,Relay_Log_Pos
) 所提供的座標。中繼日誌中已執行交易的順序不一致可能會導致此值成為「低水位線」。換句話說,保證位置之前出現的交易已提交,但位置之後的交易可能已提交也可能尚未提交。如果需要更正這些間隙,請使用
START REPLICA UNTIL SQL_AFTER_MTS_GAPS
。如需更多資訊,請參閱 第 19.5.1.35 節,「複製和交易不一致」。Relay_Log_Space
所有現有中繼日誌檔案的總組合大小。
Until_Condition
,Until_Log_File
,Until_Log_Pos
START REPLICA
語句的UNTIL
子句中指定的值。Until_Condition
具有以下值如果未指定
UNTIL
子句,則為None
。如果副本正在讀取直到來源二進制日誌中的給定位置,則為
Source
。如果副本正在讀取直到其在中繼日誌中的給定位置,則為
Relay
。如果複製 SQL 線程正在處理交易,直到達到
gtid_set
中列出的第一個 GTID,則為SQL_BEFORE_GTIDS
。如果複製線程正在處理所有交易,直到兩個線程都已處理
gtid_set
中的最後一個交易,則為SQL_AFTER_GTIDS
。如果多線程副本的 SQL 線程正在執行,直到在中繼日誌中找不到更多間隙,則為
SQL_AFTER_MTS_GAPS
。
Until_Log_File
和Until_Log_Pos
指示定義複製 SQL 線程停止執行座標的日誌檔案名稱和位置。關於
UNTIL
子句的更多資訊,請參閱第 15.4.2.4 節,「START REPLICA 陳述式」。Source_SSL_Allowed
、Source_SSL_CA_File
、Source_SSL_CA_Path
、Source_SSL_Cert
、Source_SSL_Cipher
、Source_SSL_CRL_File
、Source_SSL_CRL_Path
、Source_SSL_Key
、Source_SSL_Verify_Server_Cert
這些欄位顯示副本用來連線到來源的 SSL 參數(如果有的話)。
Source_SSL_Allowed
具有下列值如果允許與來源進行 SSL 連線,則為
Yes
。如果不允許與來源進行 SSL 連線,則為
No
。如果允許 SSL 連線,但副本伺服器未啟用 SSL 支援,則為
Ignored
。
其他與 SSL 相關欄位的值對應於
CHANGE REPLICATION SOURCE TO
陳述式的SOURCE_SSL_*
選項的值。Seconds_Behind_Source
此欄位表示副本「延遲」的程度
當副本正在主動處理更新時,此欄位會顯示副本上的目前時間戳記,與來源上針對目前正在副本上處理的事件所記錄的原始時間戳記之間的差異。
當副本上目前沒有處理任何事件時,此值為 0。
本質上,此欄位會測量複寫 SQL(應用程式)執行緒和複寫 I/O(接收器)執行緒之間的時間差(以秒為單位)。如果來源和副本之間的網路連線速度很快,則複寫接收器執行緒會非常接近來源,因此此欄位可以很好地估計複寫應用程式執行緒相較於來源的延遲程度。如果網路速度很慢,這就不是很好的估計;複寫應用程式執行緒可能很常趕上慢速讀取的複寫接收器執行緒,因此
Seconds_Behind_Source
通常會顯示值 0,即使複寫接收器執行緒相較於來源延遲。換句話說,此欄位僅適用於快速網路。即使來源和副本沒有相同的時鐘時間,只要在副本接收器執行緒啟動時計算出的差異從那時起保持不變,此時間差計算仍然有效。任何變更(包括 NTP 更新)都可能導致時鐘偏差,進而降低
Seconds_Behind_Source
計算的可靠性。在 MySQL 9.0 中,如果複寫應用程式執行緒未執行,或者應用程式執行緒已耗盡所有中繼日誌且複寫接收器執行緒未執行,則此欄位為
NULL
(未定義或未知)。(在舊版的 MySQL 中,如果複寫應用程式執行緒或複寫接收器執行緒未執行或未連線到來源,則此欄位為NULL
。)如果複寫接收器執行緒正在執行但中繼日誌已耗盡,則Seconds_Behind_Source
設定為 0。Seconds_Behind_Source
的值基於儲存在事件中的時間戳記,這些時間戳記會透過複寫保留。這表示如果來源 M1 本身是 M0 的副本,則來自 M1 二進位日誌且源自 M0 二進位日誌的任何事件都具有該事件的 M0 時間戳記。這讓 MySQL 能夠成功複寫TIMESTAMP
。但是,Seconds_Behind_Source
的問題在於,如果 M1 也從用戶端接收直接更新,Seconds_Behind_Source
值會隨機波動,因為有時來自 M1 的最後一個事件源自 M0,有時是 M1 上直接更新的結果。使用多執行緒副本時,您應該記住,此值基於
Exec_Source_Log_Pos
,因此可能無法反映最近認可的交易的位置。Last_IO_Errno
、Last_IO_Error
導致複寫 I/O(接收器)執行緒停止的最近錯誤的錯誤編號和錯誤訊息。錯誤編號為 0 且訊息為空字串表示「沒有錯誤。」如果
Last_IO_Error
值不為空,錯誤值也會出現在副本的錯誤日誌中。I/O 錯誤資訊包含一個時間戳記,顯示最近一次 I/O(接收器)執行緒錯誤發生的時間。此時間戳記使用格式
YYMMDD hh:mm:ss
,並顯示在Last_IO_Error_Timestamp
欄中。發出
RESET BINARY LOGS AND GTIDS
或RESET REPLICA
會重設這些欄位中顯示的值。Last_SQL_Errno
、Last_SQL_Error
導致複寫 SQL(應用程式)執行緒停止的最近錯誤的錯誤編號和錯誤訊息。錯誤編號為 0 且訊息為空字串表示「沒有錯誤。」如果
Last_SQL_Error
值不為空,錯誤值也會出現在副本的錯誤日誌中。如果副本是多執行緒的,則複寫 SQL 執行緒是工作執行緒的協調器。在這種情況下,
Last_SQL_Error
欄位會確切顯示效能綱要replication_applier_status_by_coordinator
表格中Last_Error_Message
欄顯示的內容。欄位值會被修改以表示其他工作執行緒中可能會有更多失敗,這些失敗可在replication_applier_status_by_worker
表格中看到,該表格會顯示每個工作執行緒的狀態。如果該表格不可用,可以使用副本錯誤日誌。也應該使用日誌或replication_applier_status_by_worker
表格來瞭解有關SHOW REPLICA STATUS
或協調器表格所顯示的失敗的更多資訊。SQL 錯誤資訊包含一個時間戳記,顯示最近一次 SQL(應用程式)執行緒錯誤發生的時間。此時間戳記使用格式
YYMMDD hh:mm:ss
,並顯示在Last_SQL_Error_Timestamp
欄中。發出
RESET BINARY LOGS AND GTIDS
或RESET REPLICA
會重設這些欄位中顯示的值。在 MySQL 9.0 中,
Last_SQL_Errno
和Last_SQL_Error
欄中顯示的所有錯誤代碼和訊息都對應於伺服器錯誤訊息參考中列出的錯誤值。在先前版本中,情況並非總是如此。(錯誤 #11760365,錯誤 #52768)Replicate_Ignore_Server_Ids
使用
CHANGE REPLICATION SOURCE TO
陳述式的IGNORE_SERVER_IDS
選項指定的任何伺服器 ID,以便副本忽略來自這些伺服器的事件。當移除其中一個伺服器時,此選項會用於循環或其他多來源複寫設定中。如果以這種方式設定任何伺服器 ID,則會顯示一個或多個數字的逗號分隔清單。如果未設定任何伺服器 ID,則欄位為空白。注意slave_master_info
表格中的Ignored_server_ids
值也會顯示要忽略的伺服器 ID,但會以空格分隔的清單形式顯示,前面是要忽略的伺服器 ID 的總數。例如,如果發出包含IGNORE_SERVER_IDS = (2,6,9)
選項的CHANGE REPLICATION SOURCE TO
陳述式,以告知副本忽略具有伺服器 ID 2、6 或 9 的來源,則該資訊會如此處所示顯示Replicate_Ignore_Server_Ids: 2, 6, 9
Ignored_server_ids: 3, 2, 6, 9
Replicate_Ignore_Server_Ids
篩選是由 I/O(接收器)執行緒執行,而不是由 SQL(應用程式)執行緒執行,這表示篩選掉的事件不會寫入中繼日誌。這與伺服器選項(例如--replicate-do-table
)所採取的篩選動作不同,後者會套用至應用程式執行緒。如果在任何通道設定了
IGNORE_SERVER_IDS
的現有伺服器 ID 時發出SET gtid_mode=ON
,則該陳述式會被拒絕並顯示錯誤。在開始基於 GTID 的複寫之前,請使用SHOW REPLICA STATUS
來檢查並清除所涉及伺服器上的所有忽略的伺服器 ID 清單。您可以使用IGNORE_SERVER_IDS=()
(即使用空的伺服器 ID 清單)發出CHANGE REPLICATION SOURCE TO
陳述式來清除清單。Source_Server_Id
來自來源的
server_id
值。Source_UUID
來自來源的
server_uuid
值。Source_Info_File
已棄用的
master.info
檔案的位置。依預設,會改用表格來儲存副本的連線中繼資料儲存庫。SQL_Delay
副本必須延遲來源的秒數。
SQL_Remaining_Delay
當
Replica_SQL_Running_State
為Waiting until SOURCE_DELAY seconds after source executed event
時,此欄位包含剩餘的延遲秒數。在其他時間,此欄位為NULL
。Replica_SQL_Running_State
SQL 執行緒的狀態(類似於
Replica_IO_State
)。該值與SHOW PROCESSLIST
顯示的 SQL 執行緒的State
值相同。第 10.14.6 節,「複寫 SQL 執行緒狀態」提供可能狀態的清單。Source_Retry_Count
在連線遺失的情況下,副本可以嘗試重新連線到來源的次數。此值可以使用
CHANGE REPLICATION SOURCE TO
陳述式的SOURCE_RETRY_COUNT
選項來設定。Source_Bind
副本繫結的網路介面(如果有的話)。這是使用
CHANGE REPLICATION SOURCE TO
陳述式的SOURCE_BIND
選項來設定的。Last_IO_Error_Timestamp
一個
YYMMDD hh:mm:ss
格式的時間戳記,顯示最近一次 I/O 錯誤發生的時間。Last_SQL_Error_Timestamp
一個
YYMMDD hh:mm:ss
格式的時間戳記,顯示最近一次 SQL 錯誤發生的時間。Retrieved_Gtid_Set
對應於此副本接收的所有交易的全球交易 ID 集。如果未使用 GTID,則為空。有關詳細資訊,請參閱GTID 集。
這是中繼日誌中存在或曾經存在的所有 GTID 的集合。一旦收到
Gtid_log_event
,就會新增每個 GTID。這可能會導致部分傳輸的交易將其 GTID 包含在集合中。當所有中繼日誌因執行
RESET REPLICA
或CHANGE REPLICATION SOURCE TO
,或因--relay-log-recovery
選項的影響而遺失時,該集合會被清除。當relay_log_purge = 1
時,最新的中繼日誌會始終保留,且該集合不會被清除。Executed_Gtid_Set
二進制日誌中寫入的全域交易 ID 集合。這與此伺服器上全域
gtid_executed
系統變數的值相同,也與此伺服器上SHOW BINARY LOG STATUS
輸出中的Executed_Gtid_Set
值相同。若未使用 GTID,則為空。更多資訊請參閱 GTID 集合。Auto_Position
若通道正在使用 GTID 自動定位,則為 1,否則為 0。
Replicate_Rewrite_DB
Replicate_Rewrite_DB
值會顯示任何指定的複寫篩選規則。例如,若設定了以下複寫篩選規則CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=((db1,db2), (db3,db4));
Replicate_Rewrite_DB
值會顯示Replicate_Rewrite_DB: (db1,db2),(db3,db4)
Channel_name
正在顯示的複寫通道。始終會有一個預設的複寫通道,而且可以新增更多複寫通道。更多資訊請參閱 第 19.2.2 節,「複寫通道」。
Master_TLS_Version
來源上使用的 TLS 版本。有關 TLS 版本資訊,請參閱 第 8.3.2 節,「加密連線 TLS 協定和密碼」。
Source_public_key_path
包含來源所需的 RSA 金鑰對密碼交換之公鑰副本的複本端檔案的路徑名稱。該檔案必須為 PEM 格式。此欄適用於使用
sha256_password
或caching_sha2_password
驗證外掛程式進行驗證的複本。若已提供
Source_public_key_path
並指定有效的公鑰檔案,則它會優先於Get_source_public_key
。Get_source_public_key
是否從來源請求 RSA 金鑰對密碼交換所需的公鑰。此欄適用於使用
caching_sha2_password
驗證外掛程式進行驗證的複本。對於該外掛程式,除非被請求,否則來源不會傳送公鑰。若已提供
Source_public_key_path
並指定有效的公鑰檔案,則它會優先於Get_source_public_key
。Network_Namespace
網路命名空間名稱;若連線使用預設(全域)命名空間,則為空。有關網路命名空間的資訊,請參閱 第 7.1.14 節,「網路命名空間支援」。