文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  SHOW REPLICA STATUS 陳述式

15.7.7.34 SHOW REPLICA STATUS 陳述式

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_PosExec_Source_Log_Pos)會設定為零,而檔案名稱(Source_Log_FileRelay_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_RunningNo

    • MYSQL_REPLICA_RUN_NOT_CONNECT.  複製 I/O (接收) 線程正在執行,但未連線到複製來源。對於此狀態,Replica_IO_RunningConnecting

    • MYSQL_REPLICA_RUN_CONNECT.  複製 I/O (接收) 線程正在執行,並且已連線到複製來源。對於此狀態,Replica_IO_RunningYes

  • 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_ErrnoLast_SQL_Error 的別名。

    發出 RESET BINARY LOGS AND GTIDSRESET 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_FileUntil_Log_Pos 指示定義複製 SQL 線程停止執行座標的日誌檔案名稱和位置。

    關於 UNTIL 子句的更多資訊,請參閱第 15.4.2.4 節,「START REPLICA 陳述式」

  • Source_SSL_AllowedSource_SSL_CA_FileSource_SSL_CA_PathSource_SSL_CertSource_SSL_CipherSource_SSL_CRL_FileSource_SSL_CRL_PathSource_SSL_KeySource_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_ErrnoLast_IO_Error

    導致複寫 I/O(接收器)執行緒停止的最近錯誤的錯誤編號和錯誤訊息。錯誤編號為 0 且訊息為空字串表示「沒有錯誤。」如果 Last_IO_Error 值不為空,錯誤值也會出現在副本的錯誤日誌中。

    I/O 錯誤資訊包含一個時間戳記,顯示最近一次 I/O(接收器)執行緒錯誤發生的時間。此時間戳記使用格式 YYMMDD hh:mm:ss,並顯示在 Last_IO_Error_Timestamp 欄中。

    發出 RESET BINARY LOGS AND GTIDSRESET REPLICA 會重設這些欄位中顯示的值。

  • Last_SQL_ErrnoLast_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 GTIDSRESET REPLICA 會重設這些欄位中顯示的值。

    在 MySQL 9.0 中,Last_SQL_ErrnoLast_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_StateWaiting 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 REPLICACHANGE 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_passwordcaching_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 節,「網路命名空間支援」