文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  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 (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_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) 會使用正確的資料更新並變得有效。當 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_RunningNo

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

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

  • 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_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.34 節「複寫和交易不一致」

  • Relay_Log_Space

    所有現有中繼日誌檔案的總合併大小。

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

    在 MySQL 8.4 中,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 會在收到 Gtid_log_event 時立即加入。這可能會導致部分傳輸的交易將其 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_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 節,「網路命名空間支援」