SHOW REPLICA STATUS [FOR CHANNEL channel]
该语句提供了副本线程的基本参数状态信息。该语句需要 REPLICATION CLIENT
权限(或已弃用的 SUPER
权限)。
SHOW REPLICA STATUS
不是阻塞的。当与 STOP REPLICA
并发运行时,SHOW REPLICA STATUS
将不等待 STOP REPLICA
完成关闭复制 SQL(应用程序)线程或复制 I/O(接收器)线程(或两者),从而允许在监控和其他应用程序中使用。
如果您使用 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_Pos
和 Exec_Source_Log_Pos
) 将被设置为零,文件名 (Source_Log_File
和 Relay_Source_Log_File
) 将被设置为 INVALID
。中继日志文件名 (Relay_Log_File
) 将根据中继日志恢复设置,设置为新创建的文件或服务器启动时存在的第一个中继日志文件。文件位置 (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(接收器)线程的
State
字段的副本,来自SHOW PROCESSLIST
输出。这告诉您线程正在做什么:尝试连接到源,等待来自源的事件,重新连接到源等。有关可能状态的列表,请参阅 第 10.14.5 节,“复制 I/O(接收器)线程状态”。 -
源主机
复制连接到的源主机。
-
源用户名
用于连接到源的用户名。
-
源端口
连接到源时使用的端口。
-
连接重试
连接重试之间的秒数(默认为 60)。这可以使用
CHANGE REPLICATION SOURCE TO
语句设置。 -
源日志文件
I/O(receiver)线程当前从中读取的源二进制日志文件的名称。这对于具有
GTID_ONLY
设置的复制通道在服务器启动后设置为INVALID
。它将在复制联系到源时更新。 -
读取源日志位置
I/O(receiver)线程在当前源二进制日志文件中读取的位置。这对于具有
GTID_ONLY
设置的复制通道在服务器启动后设置为零。它将在复制联系到源时更新。 -
中继日志文件
SQL(applier)线程当前从中读取和执行的中继日志文件的名称。
-
中继日志位置
SQL(applier)线程在当前中继日志文件中读取和执行的位置。
-
中继源日志文件
SQL(applier)线程执行的最新事件所在的源二进制日志文件的名称。这对于具有
GTID_ONLY
设置的复制通道在服务器启动后设置为INVALID
。它将在事务被执行或跳过时更新。 -
复制I/O运行
复制 I/O(receiver)线程是否启动并成功连接到源。内部,该线程的状态由以下三个值之一表示:
-
MYSQL_REPLICA_NOT_RUN. 复制 I/O(receiver)线程未运行。对于该状态,
复制I/O运行
是否
。 -
MYSQL_REPLICA_RUN_NOT_CONNECT. 复制 I/O(receiver)线程正在运行,但未连接到复制源。对于该状态,
复制I/O运行
是连接中
。 -
MYSQL_REPLICA_RUN_CONNECT. 复制 I/O(receiver)线程正在运行,并连接到复制源。对于该状态,
复制I/O运行
是是
。
-
-
复制SQL运行
复制 SQL(applier)线程是否启动。
-
复制DO_DB
,复制忽略DB
使用
--replicate-do-db
和--replicate-ignore-db
选项或CHANGE REPLICATION FILTER
语句指定的任何数据库的名称。如果使用了FOR CHANNEL
子句,则显示通道特定的复制过滤器。否则,显示每个复制通道的复制过滤器。 -
复制DO表
,复制忽略表
,复制通配DO表
,复制通配忽略表
使用
--replicate-do-table
,--replicate-ignore-table
,--replicate-wild-do-table
和--replicate-wild-ignore-table
选项或CHANGE REPLICATION FILTER
语句指定的任何表的名称。如果使用了FOR CHANNEL
子句,则显示通道特定的复制过滤器。否则,显示每个复制通道的复制过滤器。 -
最后错误号
,最后错误
这些列是
最后SQL错误号
和最后SQL错误
的别名。发出
RESET BINARY LOGS AND GTIDS
或RESET REPLICA
重置这些列中的值。Note当复制 SQL 线程收到错误时,它首先报告错误,然后停止 SQL 线程。这意味着在
SHOW REPLICA STATUS
显示非零值的Last_SQL_Errno
,即使Replica_SQL_Running
仍显示Yes
。 -
Skip_Counter
当前
sql_replica_skip_counter
系统变量的值。请参阅 SET GLOBAL sql_slave_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.34 节,“复制和事务不一致”以获取更多信息。 -
Relay_Log_Space
所有现有中继日志文件的总大小。
-
Until_Condition
,Until_Log_File
,Until_Log_Pos
在
START REPLICA
语句的UNTIL
子句中指定的值。Until_Condition
的值为:-
None
如果没有指定UNTIL
子句。 -
Source
如果复制服务器正在读取到源的二进制日志中的给定位置。 -
Relay
如果复制服务器正在读取到中继日志中的给定位置。 -
SQL_BEFORE_GTIDS
如果复制 SQL 线程正在处理事务,直到它达到gtid_set
中的第一个事务。 -
SQL_AFTER_GTIDS
如果复制线程正在处理所有事务,直到gtid_set
中的最后一个事务被处理。 -
SQL_AFTER_MTS_GAPS
如果多线程复制服务器的 SQL 线程正在运行,直到中继日志中不再找到差距。
Until_Log_File
和Until_Log_Pos
指示复制 SQL 线程停止执行的日志文件名和位置。有关
UNTIL
子句的更多信息,请参阅 第 15.4.2.6 节,“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
的值为:-
Yes
如果允许使用 SSL 连接到源服务器。 -
否
如果源的SSL连接不被允许。 -
忽略
如果SSL连接被允许,但副本服务器没有启用SSL支持。
其他SSL相关字段的值对应于
SOURCE_SSL_*
选项的CHANGE REPLICATION SOURCE TO
语句的值。 -
-
Seconds_Behind_Source
该字段表明副本是多““晚”的:
-
当副本正在积极处理更新时,该字段显示副本当前时间戳与源上记录的事件当前时间戳之间的差异。
-
当副本没有当前处理事件时,该值为 0。
本质上,该字段测量了复制SQL(应用程序)线程和复制I/O(接收器)线程之间的时间差异。如果源和副本之间的网络连接很快,那么该字段是源相比副本的良好近似值。如果网络很慢,这不是一个良好的近似值;复制应用程序线程可能经常赶上慢速读取的复制接收器线程,因此
Seconds_Behind_Source
通常显示 0 的值,即使复制接收器线程相比源很晚。该时间差异计算工作,即使源和副本的时钟时间不相同,只要从副本接收器线程启动时的差异保持不变。任何更改,包括 NTP 更新,都可能导致时钟偏移,使
Seconds_Behind_Source
的计算变得不可靠。在 MySQL 8.3 中,该字段为
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 GTIDS
或RESET REPLICA
将重置这些列中的值。 -
Last_SQL_Errno
,Last_SQL_Error
复制 SQL(应用程序)线程停止的最新错误的错误号和错误消息。如果错误号为 0,消息为空字符串,意味着““无错误。” 如果
Last_SQL_Error
值不为空,错误值也将出现在副本的错误日志中。如果副本是多线程的,则复制SQL线程是worker线程的协调器。在这种情况下,
Last_SQL_Error
字段显示的内容与性能模式replication_applier_status_by_coordinator
表中的Last_Error_Message
列相同。该字段值被修改以表明可能存在其他worker线程中的失败,可以在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 GTIDS
或RESET REPLICA
重置这些列中的值。在MySQL 8.3中,这些列中的所有错误代码和消息都对应于Server Error Message Reference中的错误值。这在之前的版本中并不是总是如此。(Bug #11760365, Bug #52768)
-
Replicate_Ignore_Server_Ids
使用
CHANGE REPLICATION SOURCE TO
|CHANGE MASTER TO
语句指定的服务器ID,以便副本忽略来自这些服务器的事件。在环形或其他多源复制设置中,当一个服务器被删除时使用该选项。如果已经设置了服务器ID,显示一个逗号分隔的列表。如果没有设置服务器ID,该字段为空。Note在slave_master_info表中的Ignored_server_ids值也显示要忽略的服务器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(receiver)线程中执行的,而不是在SQL(applier)线程中执行的,这意味着被过滤掉的事件不会被写入中继日志。这与服务器选项(如--replicate-do-table
)的过滤操作不同,这些操作适用于applier线程。如果在任何通道上设置了服务器ID时发出SET gtid_mode=ON,该语句将被拒绝并显示错误。在开始基于GTID的复制之前,使用
SHOW REPLICA STATUS
检查并清除所有忽略的服务器ID列表。在涉及的服务器上。你可以通过发出CHANGE REPLICATION SOURCE TO
语句使用IGNORE_SERVER_IDS=()—即空列表来清除列表。 -
Source_Server_Id
来自源的
server_id
值。 -
Source_UUID
该
服务器UUID
值来自源。 -
Source_Info_File
主服务器的
master.info
文件的位置,该文件现在已弃用。默认情况下,使用表格来存储副本的连接元数据存储库。 -
SQL_Delay
副本落后于主服务器的秒数。
-
SQL_Remaining_Delay
当
Replica_SQL_Running_State
是等待 MASTER_DELAY 秒后执行事件
时,该字段包含剩余的延迟秒数。在其他时候,该字段为空。 -
Replica_SQL_Running_State
SQL 线程的状态(类似于
Replica_IO_State
)。该值与SHOW PROCESSLIST
语句中显示的 SQL 线程的状态值相同。第 10.14.6 节,“复制 SQL 线程状态” 列出了可能的状态。 -
Source_Retry_Count
副本尝试重新连接到主服务器的次数,该值可以使用
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 集合。如果不使用 GTID,则为空。请参阅 GTID 集合 了解更多信息。
这是所有 relay 日志中存在或曾经存在的 GTID 集合。每个 GTID 都会在
Gtid_log_event
接收时添加。这可能会导致部分传输的事务 GTID 被包括在集合中。当所有 relay 日志由于执行
RESET REPLICA
或CHANGE REPLICATION SOURCE TO
,或由于--relay-log-recovery
选项的影响时,该集合将被清除。当relay_log_purge = 1
时,最新的 relay 日志将被保留,该集合不会被清除。 -
Executed_Gtid_Set
该服务器的二进制日志中写入的全局事务 ID 集合。这与该服务器上的全局
gtid_executed
系统变量的值相同,也是SHOW BINARY LOG 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)
有关更多信息,请参阅 第 15.4.2.2 节,“CHANGE REPLICATION FILTER 语句”。
-
Channel_name
当前显示的复制通道。总是有一个默认的复制通道,可以添加更多的复制通道。有关更多信息,请参阅第 19.2.2 节,“复制通道”。
-
Master_TLS_Version
源使用的 TLS 版本。有关 TLS 版本信息,请参阅第 8.3.2 节,“加密连接 TLS 协议和密码”。
-
Source_public_key_path
包含源所需的 RSA 密钥对基于密码交换的公钥副本的文件路径名。文件必须是 PEM 格式。此列适用于使用
sha256_password
或caching_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 节,“网络命名空间支持”。