文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 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 參考手冊  /  ...  /  檢查複製狀態

19.1.7.1 檢查複製狀態

管理複製程序時最常見的工作是確保正在進行複製,並且副本和來源之間沒有發生錯誤。

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_ErrorLast_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)