13.7.5.34 SHOW SLAVE STATUS 语句

SHOW SLAVE STATUS [FOR CHANNEL channel]

该语句提供有关副本线程基本参数的状态信息。它需要SUPERREPLICATION CLIENT特权。

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

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: localhost
                  Master_User: repl
                  Master_Port: 13000
                Connect_Retry: 60
              Master_Log_File: source-bin.000002
          Read_Master_Log_Pos: 1307
               Relay_Log_File: replica-relay-bin.000003
                Relay_Log_Pos: 1508
        Relay_Master_Log_File: source-bin.000002
             Slave_IO_Running: Yes
            Slave_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_Master_Log_Pos: 1307
              Relay_Log_Space: 1858
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
                  Master_UUID: 3e11fa47-71ca-11e1-9e33-c80aa9429562
             Master_Info_File: /var/mysqld.2/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Reading event from the relay log
           Master_Retry_Count: 10
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_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:
           Master_TLS_Version: TLSv1.2

性能架构提供了一些 table,这些 table 公开了复制信息。这类似于显示从站状态语句中可用的信息,但以 table 格形式 table 示。有关详细信息,请参见第 25.12.11 节,“性能架构复制 table”

以下列 table 描述了显示从站状态返回的字段。有关解释其含义的其他信息,请参见第 16.1.7.1 节“检查复制状态”

  • Slave_IO_State

副本 I/O 线程的SHOW PROCESSLIST输出的State字段的副本。这告诉您线程在做什么:尝试连接到源,await 源中的事件,重新连接到源,等等。有关可能状态的列 table,请参见第 8.14.6 节“复制副本 I/O 线程状态”

  • Master_Host

副本连接到的源主机。

  • Master_User

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

  • Master_Port

用于连接到源的端口。

  • Connect_Retry

连接重试之间的秒数(默认为 60)。可以使用更改为主语句设置。

  • Master_Log_File

当前正在从中读取 I/O 线程的源二进制日志文件的名称。

  • Read_Master_Log_Pos

I/O 线程已读取到的当前源二进制日志文件中的位置。

  • Relay_Log_File

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

  • Relay_Log_Pos

当前中继日志文件中 SQL 线程已读取并执行的位置。

  • Relay_Master_Log_File

源二进制日志文件的名称,该文件包含由 SQL 线程执行的最新事件。

  • Slave_IO_Running

I/O 线程是否已启动并已成功连接到源。在内部,此线程的状态由以下三个值之一 table 示:

  • MYSQL_SLAVE_NOT_RUN. 副本 I/O 线程未运行。对于此状态,Slave_IO_RunningNo

    • MYSQL_SLAVE_RUN_NOT_CONNECT. 副本 I/O 线程正在运行,但未连接到复制源。对于此状态,Slave_IO_RunningConnecting

    • MYSQL_SLAVE_RUN_CONNECT. 副本 I/O 线程正在运行,并已连接到复制源。对于此状态,Slave_IO_RunningYes

Slave_running系统状态变量的值与此值相对应。

  • Slave_SQL_Running

SQL 线程是否已启动。

  • Replicate_Do_DB , Replicate_Ignore_DB

使用--replicate-do-db--replicate-ignore-db选项指定的数据库列 table(如果有)。

  • 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选项指定的 table 的列 table(如果有)。

  • Last_Errno , Last_Error

这些列是Last_SQL_ErrnoLast_SQL_Error的别名。

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

Note

当副本 SQL 线程收到错误时,它将首先报告该错误,然后停止该 SQL 线程。这意味着在很小的时间范围内,即使Slave_SQL_Running仍显示Yes显示从站状态仍为Last_SQL_Errno显示非零值。

  • Skip_Counter

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

  • Exec_Master_Log_Pos

SQL 线程已在其上读取并执行的当前源二进制日志文件中的位置,标记下一个要处理的事务或事件的开始。从现有副本启动新副本时,可以将此值与更改为主语句的MASTER_LOG_POS选项一起使用,以便从此点读取新副本。源的二进制日志中由(Relay_Master_Log_FileExec_Master_Log_Pos)给出的坐标与中继日志中由(Relay_Log_File _ Relay_Log_Pos)给出的坐标相对应。

已执行的中继日志中的事务 Sequences 不一致会导致该值成为“低水位标记”。换句话说,保证在该头寸之前出现的 Transaction 已被保证已落实,但在该头寸之后的 Transaction 可能已承诺或未承诺。如果需要纠正这些差距,请使用从开始直到 SQL_AFTER_MTS_GAPS。有关更多信息,请参见第 16.4.1.32 节,“复制和事务不一致”

  • Relay_Log_Space

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

  • Until_Condition , Until_Log_File , Until_Log_Pos

START SLAVE语句的UNTIL子句中指定的值。

Until_Condition具有以下值:

  • None(如果未指定UNTIL子句)

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

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

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

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

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

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

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

  • Master_SSL_Allowed , Master_SSL_CA_File , Master_SSL_CA_Path , Master_SSL_Cert , Master_SSL_Cipher , Master_SSL_CRL_File , Master_SSL_CRL_Path , Master_SSL_Key , Master_SSL_Verify_Server_Cert

这些字段显示副本用于连接到源的 SSL 参数(如果有)。

Master_SSL_Allowed具有以下值:

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

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

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

其他与 SSL 相关的字段的值对应于更改为主语句的MASTER_SSL_CAMASTER_SSL_CAPATHMASTER_SSL_CERTMASTER_SSL_CIPHERMASTER_SSL_CRLMASTER_SSL_CRLPATHMASTER_SSL_KEYMASTER_SSL_VERIFY_SERVER_CERT选项的值。参见第 13.4.2.1 节“将主 table 更改为语句”

  • Seconds_Behind_Master

此字段指示副本的“延迟”程度:

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

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

本质上,此字段以秒为单位测量副本 SQL 线程和副本 I/O 线程之间的时间差。如果源和副本之间的网络连接很快,则副本 I/O 线程与源非常接近,因此此字段很好地近似了将副本 SQL 线程与源比较的时间。如果网络很慢,这不是一个很好的近似值。副本 SQL 线程可能经常会被读取速度较慢的副本 I/O 线程所追赶,因此Seconds_Behind_Master通常显示值为 0,即使 I/O 线程比源线程晚。换句话说,此列仅对快速网络有用。

即使源和副本不具有相同的时钟时间,此时间差计算也可以工作,前提是在副本 I/O 线程启动时计算出的差从那时起保持恒定。任何更改(包括 NTP 更新)都可能导致时钟偏斜,从而使Seconds_Behind_Master的计算可靠性降低。

在 MySQL 5.7 中,如果副本 SQL 线程未运行,或者 SQL 线程消耗了所有中继日志并且副本 I/O 线程未运行,则此字段为NULL(未定义或未知)。 (在旧版本的 MySQL 中,如果副本 SQL 线程或副本 I/O 线程未运行或未连接到源,则此字段为NULL.)如果 I/O 线程正在运行但中继日志已用尽, Seconds_Behind_Master设置为 0.

Seconds_Behind_Master的值基于事件中存储的时间戳,这些时间戳是通过复制保留的。这意味着,如果源 M1 本身是 M0 的副本,则 M1 的二进制日志中源自 M0 的二进制日志的任何事件均具有该事件的 M0 时间戳。这使 MySQL 能够成功复制TIMESTAMP。但是,Seconds_Behind_Master的问题在于,如果 M1 也从 Client 端接收直接更新,则Seconds_Behind_Master值会随机波动,因为有时 M1 的最后一个事件起源于 M0,有时是 M1 的直接更新的结果。

使用多线程副本时,应记住此值基于Exec_Master_Log_Pos,因此可能无法反映最近提交的事务的位置。

  • Last_IO_Errno , Last_IO_Error

导致 I/O 线程停止的最新错误的错误号和错误消息。错误号 0 和空字符串的消息 table 示“无错误”。如果Last_IO_Error值不为空,则错误值也会出现在副本的错误日志中。

I/O 错误信息包括显示最新 I/O 线程错误发生时间的时间戳。该时间戳使用* YYMMDD hh:mm:ss *格式,并显示在Last_IO_Error_Timestamp列中。

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

  • Last_SQL_Errno , Last_SQL_Error

导致 SQL 线程停止的最新错误的错误号和错误消息。错误号 0 和空字符串的消息 table 示“无错误”。如果Last_SQL_Error值不为空,则错误值也会出现在副本的错误日志中。

如果副本是多线程的,则 SQL 线程是工作线程的协调器。在这种情况下,Last_SQL_Error字段将准确显示“性能模式replication_applier_status_by_coordinator”table 中的Last_Error_Message列。修改该字段值以 table 明其他工作线程中可能会有更多的失败,这可以在显示每个工作线程状态的replication_applier_status_by_workertable 中看到。如果该 table 不可用,则可以使用副本错误日志。日志或replication_applier_status_by_workertable 也应用于了解有关显示从站状态或协调器 table 显示的故障的更多信息。

SQL 错误信息包括一个时间戳,该时间戳显示何时发生了最新的 SQL 线程错误。该时间戳使用* YYMMDD hh:mm:ss *格式,并显示在Last_SQL_Error_Timestamp列中。

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

在 MySQL 5.7 中,在Last_SQL_ErrnoLast_SQL_Error列中显示的所有错误代码和消息均与在第 B.3.1 节“服务器错误消息参考”中列出的错误值相对应。在以前的版本中并非总是如此。 (缺陷#11760365,缺陷#52768)

  • Replicate_Ignore_Server_Ids

在 MySQL 5.7 中,您可以使用更改为主语句的IGNORE_SERVER_IDS选项将副本设置为忽略 0 个或多个源中的事件。默认情况下为空白,通常仅在使用循环或其他多源复制设置时才进行修改。为Replicate_Ignore_Server_Ids显示的消息(如果不是空白)由一个或多个数字的逗号分隔列 table 组成,table 示要忽略的服务器 ID。例如:

Replicate_Ignore_Server_Ids: 2, 6, 9

Note

Ignored_server_ids还显示了要忽略的服务器 ID,但是它是一个以空格分隔的列 table,其后是要忽略的服务器 ID 的总数。例如,如果发出了包含IGNORE_SERVER_IDS = (2,6,9)选项的更改为主语句以告知副本忽略服务器 ID 为 2、6 或 9 的源,则该信息如下所示:

Ignored_server_ids: 3, 2, 6, 9

第一个数字(在本例中为3)显示了被忽略的服务器 ID 的数量。

Replicate_Ignore_Server_Ids过滤是由 I/O 线程而不是 SQL 线程执行的,这意味着被过滤掉的事件不会写入中继日志。这与服务器选项--replicate-do-table(适用于 SQL 线程)采取的过滤操作不同。

  • Master_Server_Id

来自来源的server_id值。

  • Master_UUID

来自来源的server_uuid值。

  • Master_Info_File

master.info文件的位置。

  • SQL_Delay

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

  • SQL_Remaining_Delay

Slave_SQL_Running_StateWaiting until MASTER_DELAY seconds after master executed event时,此字段包含剩余的延迟秒数。在其他时间,此字段为NULL

  • Slave_SQL_Running_State

SQL 线程的状态(类似于Slave_IO_State)。该值与SHOW PROCESSLIST显示的 SQL 线程的State值相同。 第 8.14.7 节“复制副本 SQL 线程状态”,提供可能状态的列 table

  • Master_Retry_Count

在失去连接的情况下副本可以尝试重新连接到源的次数。可以使用更改为主语句的MASTER_RETRY_COUNT选项(首选)或较旧的--master-retry-count服务器选项(仍支持向后兼容)来设置此值。

  • Master_Bind

副本绑定到的网络接口(如果有)。这是使用更改为主语句的MASTER_BIND选项设置的。

  • 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 Sets

这是中继日志中已存在或已存在的所有 GTID 的集合。收到Gtid_log_event后,即会添加每个 GTID。这可能导致部分传输的事务将其 GTID 包含在集合中。

当由于执行RESET SLAVE更改为主--relay-log-recovery选项的影响而丢失所有中继日志时,将清除该集。 relay_log_purge = 1时,始终保留最新的中继日志,并且不清除该集合。

  • Executed_Gtid_Set

二进制日志中写入的一组全局事务 ID。此值与此服务器上全局gtid_executed系统变量的值相同,也与此服务器上显示主状态的输出中Executed_Gtid_Set的值相同。如果未使用 GTID,则为空。有关更多信息,请参见GTID Sets

  • Auto_Position

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 节“更改复制过滤器语句”

  • Channel_name

正在显示的复制通道。始终有一个默认的复制通道,并且可以添加更多的复制通道。有关更多信息,请参见第 16.2.3 节“复制通道”

  • Master_TLS_Version

源上使用的 TLS 版本。有关 TLS 版本的信息,请参见第 6.3.2 节“加密的连接 TLS 协议和密码”。该列是在 MySQL 5.7.10 中添加的。