文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  检查复制状态

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)