文档首页
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 参考手册  /  ...  /  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:

性能模式提供了一些表来暴露复制信息。这类似于从 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 列在 gtid_set 中的事务,则为 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_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 具有以下值

    • 如果允许与源建立 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 字段显示与 Performance Schema 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 的数量。例如,如果 CHANGE REPLICATION SOURCE 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)采取的过滤操作不同,后者适用于应用程序线程。

    如果在任何通道都已使用 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

    显示最近的 I/O 错误发生时间的 YYMMDD hh:mm:ss 格式的时间戳。

  • Last_SQL_Error_Timestamp

    显示最近的 SQL 错误发生时间的 YYMMDD hh:mm:ss 格式的时间戳。

  • 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_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 节,“网络命名空间支持”