Documentation Home

13.7.7.35 显示副本状态语句

SHOW {REPLICA | SLAVE} STATUS [FOR CHANNEL channel]

此语句提供有关副本线程基本参数的状态信息。从 MySQL 8.0.22 开始,使用 SHOW REPLICA STATUS代替 SHOW SLAVE STATUS,该版本已弃用。在 MySQL 8.0.22 之前的版本中,使用SHOW SLAVE STATUS. 该语句需要REPLICATION CLIENT特权(或已弃用的 SUPER特权)。

SHOW REPLICA STATUS是非阻塞的。当与 并发运行时 STOP REPLICASHOW REPLICA STATUS 返回而不等待 STOP REPLICA完成关闭复制 SQL(应用程序)线程或复制 I/O(接收方)线程(或两者)。这允许用于监控和其他应用程序,在这些应用程序中,获得即时响应SHOW REPLICA STATUS比确保返回最新数据更重要。SLAVE 关键字在 MySQL 8.0.22 中被替换为 REPLICA。

如果使用mysql 客户端发出此语句,则可以使用\G语句终止符而不是分号来获得更具可读性的垂直布局:

mysql> SHOW REPLICA STATUS\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for source to send event
                  Source_Host: localhost
                  Source_User: repl
                  Source_Port: 13000
                Connect_Retry: 60
              Source_Log_File: source-bin.000002
          Read_Source_Log_Pos: 1307
               Relay_Log_File: replica-relay-bin.000003
                Relay_Log_Pos: 1508
        Relay_Source_Log_File: source-bin.000002
           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: 1307
              Relay_Log_Space: 1858
              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: 3e11fa47-71ca-11e1-9e33-c80aa9429562
             Source_Info_File:
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
    Replica_SQL_Running_State: Reading event from the relay log
           Source_Retry_Count: 10
                  Source_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Source_SSL_Crl:
           Source_SSL_Crlpath:
           Retrieved_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5
            Executed_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_name:
           Source_TLS_Version: TLSv1.2
       Source_public_key_path: public_key.pem
        Get_source_public_key: 0
            Network_Namespace:

性能模式提供公开复制信息的表。这类似于SHOW REPLICA STATUS声明中提供的信息,但以表格形式表示。有关详细信息,请参阅 第 27.12.11 节,“性能模式复制表”

从 MySQL 8.0.27 开始,您可以GTID_ONLY 在语句上设置选项CHANGE REPLICATION SOURCE TO以停止复制通道在复制元数据存储库中保留文件名和文件位置。使用此设置,可以在内存中跟踪源二进制日志文件和中继日志文件的文件位置。该 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) 将更新为正确的数据并变为有效。当 applier 线程从源应用一个事务,或者跳过一个已经执行的事务时,执行的位置 ( Exec_Source_Log_Pos) 和文件名 ( Relay_Source_Log_File) 被更新为正确的数据并变得有效。中继日志文件位置 ( Relay_Log_Pos) 也在此时更新。

以下列表描述了 返回的字段 SHOW REPLICA STATUS。有关解释其含义的其他信息,请参阅 第 17.1.7.1 节,“检查复制状态”

  • Replica_IO_State

    副本I/O(接收方)线程State的输出字段的 副本。SHOW PROCESSLIST这会告诉您线程正在做什么:尝试连接到源、等待来自源的事件、重新连接到源等等。有关可能状态的列表,请参阅 第 8.14.5 节,“复制 I/O(接收器)线程状态”

  • Source_Host

    副本连接到的源主机。

  • Source_User

    用于连接到源的帐户的用户名。

  • Source_Port

    用于连接源的端口。

  • Connect_Retry

    连接重试之间的秒数(默认 60)。这可以用CHANGE REPLICATION SOURCE TO语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO 语句(MySQL 8.0.23 之前)来设置。

  • Source_Log_File

    I/O(接收方)线程当前正在读取的源二进制日志文件的名称。这被设置为 用于具有服务器启动后设置INVALID的复制通道。GTID_ONLY当副本联系源时,它将被更新。

  • Read_Source_Log_Pos

    I/O(接收方)线程已读取的当前源二进制日志文件中的位置。GTID_ONLY对于具有服务器启动后设置的复制通道,此设置为零 。当副本联系源时,它将被更新。

  • Relay_Log_File

    SQL(应用程序)线程当前正在从中读取和执行的中继日志文件的名称。

  • Relay_Log_Pos

    SQL(应用程序)线程已读取和执行的当前中继日志文件中的位置。

  • Relay_Source_Log_File

    包含 SQL(应用程序)线程执行的最新事件的源二进制日志文件的名称。这被设置为用于具有服务器启动后设置INVALID的复制通道。GTID_ONLY当交易被执行或跳过时,它将被更新。

  • 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_Errno和 的别名Last_SQL_Error

    发出RESET MASTERRESET REPLICA重置这些列中显示的值。

    笔记

    当复制 SQL 线程收到错误时,它首先报告错误,然后停止 SQL 线程。这意味着有一个小的时间窗口,在此期间 SHOW REPLICA STATUS显示一个非零值,Last_SQL_Errno尽管 Replica_SQL_Running仍然显示 Yes

  • Skip_Counter

    sql_slave_skip_counter 系统变量 的当前值 。参见 SET GLOBAL sql_slave_skip_counter 语句

  • Exec_Source_Log_Pos

    复制 SQL 线程已读取和执行的当前源二进制日志文件中的位置,标记下一个要处理的事务或事件的开始。GTID_ONLY对于具有服务器启动后设置的复制通道,此设置为零 。当交易被执行或跳过时,它将被更新。

    您可以在从现有副本启动新副本时将此值与CHANGE REPLICATION SOURCE TO语句的 SOURCE_LOG_POS选项(从 MySQL 8.0.23 开始)或CHANGE MASTER TO语句的 MASTER_LOG_POS选项(MySQL 8.0.23 之前)一起使用,以便新副本从该点读取。源二进制日志中 ( , ) 给出的坐标与Relay_Source_Log_File中继 日志中 ( , ) 给出的坐标相对应。Exec_Source_Log_PosRelay_Log_FileRelay_Log_Pos

    已执行的中继日志中事务顺序的不一致可能导致该值成为低水位线。换句话说,保证在该位置之前出现的事务已提交,但在该位置之后的事务可能已提交或未提交。如果需要纠正这些差距,请使用 START REPLICA UNTIL SQL_AFTER_MTS_GAPS. 有关更多信息,请参阅 第 17.5.1.34 节,“复制和事务不一致”

  • Relay_Log_Space

    所有现有中继日志文件的总组合大小。

  • Until_Condition, Until_Log_File, Until_Log_Pos

    UNTIL在语句的子句中 指定的值START REPLICA

    Until_Condition具有以下值:

    • None如果没有UNTIL 指定子句。

    • Source如果副本正在读取直到源二进制日志中的给定位置。

    • Relay如果副本正在读取直到其中继日志中的给定位置。

    • SQL_BEFORE_GTIDS如果复制 SQL 线程正在处理事务,直到它到达第一个事务,其 GTID 在gtid_set.

    • SQL_AFTER_GTIDS如果复制线程正在处理所有事务,直到两个线程都处理了中的最后一个事务gtid_set

    • SQL_AFTER_MTS_GAPS如果多线程副本的 SQL 线程正在运行,直到在中继日志中找不到更多间隙。

    Until_Log_FileUntil_Log_Pos指示定义复制 SQL 线程停止执行的坐标的日志文件名和位置。

    有关UNTIL子句的更多信息,请参阅第 13.4.2.9 节,“START SLAVE 语句”

  • 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具有以下值:

    • Yes如果允许与源的 SSL 连接。

    • No如果不允许与源的 SSL 连接。

    • Ignored如果允许 SSL 连接但副本服务器未启用 SSL 支持。

    其他SSL相关字段的值对应语句SOURCE_SSL_*选项的 值CHANGE REPLICATION SOURCE TO (从MySQL 8.0.23开始),或者语句的 MASTER_SSL_*选项 CHANGE MASTER TO(MySQL 8.0.23之前)。请参阅 第 13.4.2.1 节,“将 MASTER 更改为语句”

  • Seconds_Behind_Source

    该字段指示副本 有多” :

    • 当副本正在积极处理更新时,此字段显示副本上的当前时间戳与副本上当前正在处理的事件的源上记录的原始时间戳之间的差异。

    • 当副本上当前没有正在处理的事件时,此值为 0。

    本质上,该字段测量复制 SQL(应用程序)线程和复制 I/O(接收方)线程之间的时间差(以秒为单位)。如果源和副本之间的网络连接很快,复制接收线程离源很近,所以这个字段是复制应用程序线程比源多晚的一个很好的近似值。如果网络很慢,这 不是一个很好的近似;复制应用程序线程可能经常被慢速读取的复制接收器线程赶上,所以 Seconds_Behind_Source通常显示值 0,即使复制接收器线程比源线程晚。也就是说,这个专栏只对快速网络有用

    即使源和副本没有相同的时钟时间,这种时间差计算也有效,前提是副本接收器线程启动时计算的差异从那时起保持不变。任何更改(包括 NTP 更新)都可能导致时钟偏差,从而降低计算的Seconds_Behind_Source可靠性。

    在 MySQL 8.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_Errno, Last_IO_Error

    导致复制 I/O(接收方)线程停止的最新错误的错误号和错误消息。错误编号 0 和空字符串的消息表示 没有错误。如果该 Last_IO_Error值不为空,则错误值也会出现在副本的错误日志中。

    I/O 错误信息包括显示最近 I/O(接收方)线程错误发生时间的时间戳。此时间戳使用格式YYMMDD hh:mm:ss, 并出现在 Last_IO_Error_Timestamp列中。

    发出RESET MASTERRESET REPLICA重置这些列中显示的值。

  • Last_SQL_Errno, Last_SQL_Error

    导致复制 SQL(应用程序)线程停止的最新错误的错误号和错误消息。错误编号 0 和空字符串的消息表示 没有错误。如果该 Last_SQL_Error值不为空,则错误值也会出现在副本的错误日志中。

    如果副本是多线程的,则复制 SQL 线程是工作线程的协调器。在这种情况下,该 Last_SQL_Error字段准确显示Last_Error_MessagePerformance Schema replication_applier_status_by_coordinator 表中的列显示的内容。修改字段值以表明其他工作线程中可能存在更多故障,这可以在 replication_applier_status_by_worker 显示每个工作线程状态的表中看到。如果该表不可用,则可以使用副本错误日志。日志或 replication_applier_status_by_worker 表还应该用于了解有关 SHOW REPLICA STATUS协调表或协调表显示的故障的更多信息。

    SQL 错误信息包括显示最近的 SQL(应用程序)线程错误发生时间的时间戳。此时间戳使用格式YYMMDD hh:mm:ss, 并出现在 Last_SQL_Error_Timestamp列中。

    发出RESET MASTERRESET REPLICA重置这些列中显示的值。

    在MySQL 8.0中,Last_SQL_Errno和 列中显示的所有错误代码和消息都与服务器错误消息参考Last_SQL_Error中列出的错误值相对应 。这在以前的版本中并不总是如此。(缺陷 #11760365,缺陷 #52768)

  • Replicate_Ignore_Server_Ids

    使用|的IGNORE_SERVER_IDS选项 指定的任何服务器 ID 语句,以便副本忽略来自这些服务器的事件。当其中一个服务器被删除时,此选项用于循环或其他多源复制设置。如果以这种方式设置了任何服务器 ID,则会显示一个或多个数字的逗号分隔列表。如果未设置服务器 ID,则该字段为空。 CHANGE REPLICATION SOURCE TOCHANGE MASTER TO

    笔记

    表中的Ignored_server_idsslave_master_info还显示要忽略的服务器 ID,但以空格分隔的列表形式显示,前面是要忽略的服务器 ID 总数。例如,如果一个CHANGE REPLICATION SOURCE TO| CHANGE MASTER TO已发出包含选项的语句 IGNORE_SERVER_IDS = (2,6,9)以告知副本忽略服务器 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适用于应用程序线程。

    笔记

    SET GTID_MODE=ON从 MySQL 8.0 开始,如果在任何通道的现有服务器 ID 设置为 时 发出 ,则会发出 弃用警告 IGNORE_SERVER_IDS。在开始基于 GTID 的复制之前,用于 SHOW REPLICA STATUS检查并清除所涉及服务器上所有被忽略的服务器 ID 列表。您可以通过发出CHANGE REPLICATION SOURCE TO| 来清除列表 包含带有空列表 CHANGE MASTER TO的选项的语句。IGNORE_SERVER_IDS

  • Source_Server_Id

    server_id来自源 的价值。

  • Source_UUID

    server_uuid来自源 的价值。

  • Source_Info_File

    文件的位置,master.info现在已弃用。默认情况下,从 MySQL 8.0 开始,使用表代替副本的连接元数据存储库。

  • SQL_Delay

    副本必须滞后于源的秒数。

  • SQL_Remaining_Delay

    Replica_SQL_Running_State为 时Waiting until MASTER_DELAY seconds after source executed event,此字段包含剩余的延迟秒数。在其他时候,这个字段是 NULL

  • Replica_SQL_Running_State

    SQL 线程的状态(类似于 Replica_IO_State)。该值与State显示的 SQL 线程的值相同SHOW PROCESSLIST第 8.14.6 节,“复制 SQL 线程状态”,提供了可能状态的列表。

  • Source_Retry_Count

    在连接丢失的情况下,副本可以尝试重新连接到源的次数。可以使用SOURCE_RETRY_COUNT| 设置此值 MASTER_RETRY_COUNT语句的选项 CHANGE REPLICATION SOURCE TO (来自 MySQL 8.0.23)或CHANGE MASTER TO语句(MySQL 8.0.23 之前),或较旧的--master-retry-count 服务器选项(仍然支持向后兼容)。

  • Source_Bind

    副本绑定到的网络接口(如果有)。这是使用SOURCE_BIND| 设置的 语句(来自 MySQL 8.0.23)或语句(MySQL 8.0.23 之前)MASTER_BIND的选项 。 CHANGE REPLICATION SOURCE TOCHANGE MASTER TO

  • 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|而丢失时 CHANGE MASTER TO,或者由于 --relay-log-recovery选项的影响,集合被清除。时 relay_log_purge = 1,始终保留最新的relay log,不清除集合。

  • Executed_Gtid_Set

    写入二进制日志的一组全局事务 ID。这与此服务器上的全局 gtid_executed系统变量的值以及此服务器 上Executed_Gtid_Set的输出中 的值相同SHOW MASTER STATUS。如果未使用 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)

    有关详细信息,请参阅 第 13.4.2.2 节,“CHANGE REPLICATION FILTER 语句”

  • Channel_name

    正在显示的复制通道。总是有一个默认的复制通道,可以添加更多的复制通道。有关更多信息,请参阅 第 17.2.2 节,“复制通道”

  • Master_TLS_Version

    源上使用的 TLS 版本。有关 TLS 版本信息,请参阅 第 6.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

    网络命名空间名称;如果连接使用默认(全局)命名空间,则为空。有关网络命名空间的信息,请参阅第 5.1.14 节,“网络命名空间支持”。此列是在 MySQL 8.0.22 中添加的。