Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  SHOW REPLICA STATUS Statement

15.7.7.34 显示副本状态语句

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:

性能Schema提供了表格,用于暴露复制信息。这与SHOW REPLICA STATUS语句类似,但以表格形式表示。详细信息,请见Section 29.12.11,“Performance Schema Replication Tables”.

可以将CHANGE REPLICATION SOURCE TO语句的GTID_ONLY选项设置为停止复制通道,避免在复制元数据存储库中存储文件名和文件位置。使用该设置时,源二进制日志文件和中继日志文件的文件位置将在内存中跟踪。然而,因为文件位置不再在连接元数据存储库和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)将被更新为正确的数据,并变得有效。当应用线程从源应用事务,或者跳过已经执行的事务时,执行位置(Exec_Source_Log_Pos)和文件名(Relay_Source_Log_File)将被更新为正确的数据,并变得有效。同时,relay日志文件位置(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

    当前读取的源二进制日志文件的名称。对于使用CHANGE REPLICATION SOURCE TO语句设置的复制通道,Source_Log_File将被设置为INVALID。当复制线程联系到源时将被更新。

  • Read_Source_Log_Pos

    当前读取的源二进制日志文件的位置。这将被设置为零对于使用CHANGE REPLICATION SOURCE TO语句设置的复制通道。将被更新当复制线程联系到源时。

  • Relay_Log_File

    当前读取的relay日志文件的名称。

  • Relay_Log_Pos

    当前读取的relay日志文件的位置。

  • Relay_Source_Log_File

    源二进制日志文件名,包含最新执行的事件。该值在服务器启动后设置为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(应用)线程。

  • 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将重置这些列中的值。

    Note

    当复制 SQL 线程接收到错误时,它首先报告错误,然后停止 SQL 线程。这意味着,在SHOW REPLICA STATUS显示的窗口中,Last_SQL_Errno将显示非零值,而Replica_SQL_Running仍然显示Yes

  • Skip_Counter

    系统变量sql_replica_skip_counter的当前值。

  • Exec_Source_Log_Pos

    复制 SQL 线程已经读取和执行的当前源二进制日志文件的位置,这标识了下一个事务或事件的开始。这在服务器启动时将被设置为零,并且在事务执行或跳过时将被更新。

    您可以使用CHANGE REPLICATION SOURCE TO语句的SOURCE_LOG_POS选项来启动新的复制源,从现有复制源开始读取,从这个位置开始读取。源二进制日志文件中的(Relay_Source_Log_FileExec_Source_Log_Pos)坐标对应于relay日志文件中的(Relay_Log_FileRelay_Log_Pos)坐标。

    relay日志文件中的事务顺序不一致可能会导致这个值变为“低水位标记”。换言之,事务前面的坐标保证已经提交,但是事务后的坐标可能已经提交或未提交。如果需要纠正这些差异,请使用START REPLICA UNTIL SQL_AFTER_MTS_GAPS。请参阅第19.5.1.34节,“Replication and Transaction Inconsistencies”获取更多信息。

  • Relay_Log_Space

    所有现有relay日志文件的总大小。

  • Until_ConditionUntil_Log_FileUntil_Log_Pos

    START REPLICA 语句中的UNTIL子句的值。

    Until_Condition的值:

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

    • Source如果复制源读取到源二进制日志的某个位置。

    • Relay如果复制源读取到relay日志的某个位置。

    • SQL_BEFORE_GTIDS 如果复制 SQL 线程正在处理事务,直到它达到第一个在 gtid_set 中列出的事务的 GTID。

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

    • SQL_AFTER_MTS_GAPS 如果多线程副本的 SQL 线程正在运行,直到在中继日志中找到最后一个空隙。

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

    有关 UNTIL take a look at Section 15.4.2.4, “START REPLICA Statement”.

  • 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 相关字段的值对应于 CHANGE REPLICATION SOURCE TO 语句中的 SOURCE_SSL_* 选项的值。

  • Seconds_Behind_Source

    这个字段表示副本的“late程度:

    • 当副本正在处理更新时,这个字段显示副本当前时间戳和源上事件当前时间戳的差异。

    • 当副本没有正在处理事件时,这个值为 0。

    本质上,这个字段测量的是复制 SQL(applier)线程和复制 I/O(receiver)线程之间的时间差。如果网络连接速度快,复制 receiver 线程与源非常接近,这个字段是一个很好的近似值。如果网络速度慢,这个字段可能不是一个好的近似值;复制 applier 线程可能会经常落后于慢读复制 receiver 线程,所以 Seconds_Behind_Source 通常显示一个值为 0,即使复制 receiver 线程落后于源。换言之,这个字段只在快速网络下有用。

    本计算时间差异的方法,即使源和副本的时间不同,但只要差异在副本接收线程启动时保持不变,就可以工作。任何变化,包括NTP更新,可以导致时钟偏移,使Seconds_Behind_Source的计算结果不那么可靠。

    在 MySQL 8.4 中,这个字段是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 BINARY LOGS AND GTIDSRESET REPLICA将重置这些列的值。

  • Last_SQL_Errno, Last_SQL_Error

    最近一次复制 SQL (应用)线程错误的错误号和错误信息。如果错误号为 0,错误信息为空字符串,则表示“没有错误”。如果Last_SQL_Error值不为空,错误值也将出现在副本的错误日志中。

    如果复制服务器是多线程的,那么复制 SQL 线程将是工作线程的协调器。在这种情况下,Last_SQL_Error 字段显示了Last_Error_Message 列在性能.schema replication_applier_status_by_coordinator 表中的内容。该字段值将暗示可能还有其他工作线程的失败,这些失败可以在 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 列中的错误代码和消息对应于 Server Error Message Reference 中列出的错误值。这在之前的版本中不总是如此。 (Bug #11760365, Bug #52768)

  • Replicate_Ignore_Server_Ids

    使用 CHANGE REPLICATION SOURCE TO 语句的 IGNORE_SERVER_IDS 选项指定的服务器 ID,这样复制服务器可以忽略来自这些服务器的事件。在环形或多源复制设置中,当一个服务器被删除时使用该选项。如果已经设置了服务器 ID,这个字段将显示一个逗号分隔的列表,其中包含一个或多个数字。如果没有设置服务器 ID,这个字段将为空。

    Note

    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(应用)线程,这意味着被过滤的事件不会被写入到relay日志中。这与服务器选项,如--replicate-do-table,不同,该选项将应用于应用线程。

    如果在任何通道上已经设置了IGNORE_SERVER_IDS,并且执行了SET gtid_mode=ON语句,语句将被拒绝,并出现错误。在开始基于GTID的复制之前,使用SHOW REPLICA STATUS语句来检查和清除所有忽略的服务器ID列表在涉及的服务器上。您可以通过CHANGE REPLICATION SOURCE TO语句使用IGNORE_SERVER_IDS=()—即空列表—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值相同。Section 10.14.6, “Replication SQL Thread States”,提供了可能的状态列表。

  • Source_Retry_Count

    复制源断开连接时, replica 可以尝试重新连接的次数。这可以使用 SOURCE_RETRY_COUNT 选项来设置,例如在 CHANGE REPLICATION SOURCE TO 语句中。

  • Source_Bind

    复制源绑定的网络接口,如果有。使用 SOURCE_BIND 选项来设置,例如在 CHANGE REPLICATION SOURCE TO 语句中。

  • Last_IO_Error_Timestamp

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

  • Last_SQL_Error_Timestamp

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

  • Retrieved_Gtid_Set

    复制源接收到的所有事务的全局事务 ID 集合。如果 GTIDs 不在使用中,为空。详见 GTID 集合

    这是relay日志中存在或曾经存在的所有 GTID 的集合。每个 GTID 都在收到 Gtid_log_event 时添加。这样可以导致部分传输事务的 GTID 包含在集合中。

    当所有relay日志由于执行 RESET REPLICACHANGE REPLICATION SOURCE TO 语句时清除集合。或者由于 --relay-log-recovery 选项的影响时清除集合。然而,如果 relay_log_purge = 1,最新的relay日志总是保留,集合不被清除。

  • Executed_Gtid_Set

    写入到二进制日志中的全局事务 ID 集合。这与在本服务器上的全局 gtid_executed 系统变量的值相同,以及在本服务器上的 SHOW BINARY LOG STATUS 语句的 Executed_Gtid_Set 值为空。如果 GTIDs 不在使用中,详见 GTID 集合

  • Auto_Position

    如果 GTID 自动定位在使用中,为 1,否则为 0。

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