SHOW REPLICA STATUS [FOR CHANNEL channel]
此陳述式提供關於副本執行緒基本參數的狀態資訊。此陳述式需要 REPLICATION CLIENT
權限 (或已棄用的 SUPER
權限)。
SHOW REPLICA STATUS
是非阻塞的。當與 STOP REPLICA
同時執行時,SHOW REPLICA STATUS
會在不等待 STOP REPLICA
完成關閉複製 SQL (applier) 執行緒或複製 I/O (receiver) 執行緒 (或兩者) 的情況下返回。這允許在監控和其他應用程式中使用,在這些應用程式中,從 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:
效能綱要提供公開複製資訊的表格。這類似於從 SHOW REPLICA STATUS
陳述式取得的資訊,但以表格形式呈現。如需詳細資訊,請參閱 第 29.12.11 節,「效能綱要複製表格」。
您可以為 CHANGE REPLICATION SOURCE TO
陳述式設定 GTID_ONLY
選項,以停止複製通道在複製中繼資料儲存庫中持久儲存檔案名稱和檔案位置。使用此設定,來源二進位日誌檔案和中繼日誌檔案的檔案位置會在記憶體中追蹤。SHOW REPLICA STATUS
陳述式在正常使用時仍會顯示檔案位置。然而,由於檔案位置並未在連線中繼資料儲存庫和 applier 中繼資料儲存庫中定期更新,除非在少數情況下,如果伺服器重新啟動,它們很可能過時。
對於伺服器啟動後具有 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
) 會使用正確的資料更新並變得有效。當 applier 執行緒從來源套用交易,或略過已執行的交易時,已執行的位置 (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 (applier) 執行緒目前正在讀取和執行的中繼日誌檔案名稱。
Relay_Log_Pos
SQL (applier) 執行緒已讀取和執行到的目前中繼日誌檔案中的位置。
Relay_Source_Log_File
包含 SQL (applier) 執行緒執行的最新事件的來源二進位日誌檔案名稱。伺服器啟動後,具有
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 (applier) 執行緒是否已啟動。
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.34 節「複寫和交易不一致」。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 (applier) 執行緒與複寫 I/O (接收器) 執行緒之間的時間差異(以秒為單位)。如果來源與副本之間的網路連線速度很快,則複寫接收器執行緒非常接近來源,因此此欄位是複寫 applier 執行緒與來源相比延遲時間的良好近似值。如果網路速度很慢,則這不是一個好的近似值;複寫 applier 執行緒可能經常趕上速度較慢的複寫接收器執行緒,因此
Seconds_Behind_Source
通常會顯示值 0,即使複寫接收器執行緒與來源相比延遲也是如此。換句話說,此欄位僅適用於快速網路。即使來源和副本沒有相同的時鐘時間,此時間差計算也會生效,前提是副本接收器執行緒啟動時計算的差異從那時起保持不變。任何變更(包括 NTP 更新)都可能導致時鐘偏移,這會降低
Seconds_Behind_Source
計算的可靠性。在 MySQL 8.4 中,如果複寫 applier 執行緒未執行,或如果 applier 執行緒已耗用所有中繼日誌且複寫接收器執行緒未執行,則此欄位為
NULL
(未定義或未知)。(在舊版 MySQL 中,如果複寫 applier 執行緒或複寫接收器執行緒未執行或未連線到來源,則此欄位為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 (applier) 執行緒停止的最近錯誤的錯誤編號和錯誤訊息。錯誤編號為 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 (applier) 執行緒錯誤的時間。此時間戳記使用
YYMMDD hh:mm:ss
格式,並出現在Last_SQL_Error_Timestamp
欄中。發出
RESET BINARY LOGS AND GTIDS
或RESET REPLICA
會重設這些欄位中顯示的值。在 MySQL 8.4 中,
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 會在收到
Gtid_log_event
時立即加入。這可能會導致部分傳輸的交易將其 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)
如需更多資訊,請參閱 第 15.4.2.1 節,「CHANGE REPLICATION FILTER 陳述式」。
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 節,「網路命名空間支援」。