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_Pos
和Exec_Source_Log_Pos
)被设置为零,文件名(Source_Log_File
和Relay_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_Running
为No
。MYSQL_REPLICA_RUN_NOT_CONNECT. 复制 I/O(接收器)线程正在运行,但未连接到复制源。对于此状态,
Replica_IO_Running
为Connecting
。MYSQL_REPLICA_RUN_CONNECT. 复制 I/O(接收器)线程正在运行,并且已连接到复制源。对于此状态,
Replica_IO_Running
为Yes
。
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_Errno
和Last_SQL_Error
的别名。发出
RESET BINARY LOGS AND GTIDS
或RESET 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.34 节,“复制和事务不一致”。Relay_Log_Space
所有现有中继日志文件的总组合大小。
Until_Condition
,Until_Log_File
,Until_Log_Pos
START REPLICA
语句的UNTIL
子句中指定的值。Until_Condition
具有以下值如果没有指定
UNTIL
子句,则为None
。如果副本正在读取直到源二进制日志中的给定位置,则为
Source
。如果副本正在读取直到其中继日志中的给定位置,则为
Relay
。如果复制 SQL 线程正在处理事务,直到它到达
gtid_set
中列出的第一个 GTID 的事务,则为SQL_BEFORE_GTIDS
。如果复制线程正在处理所有事务,直到
gtid_set
中的最后一个事务已由两个线程处理,则为SQL_AFTER_GTIDS
。如果多线程副本的 SQL 线程正在运行,直到中继日志中不再找到任何间隙,则为
SQL_AFTER_MTS_GAPS
。
Until_Log_File
和Until_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 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 GTIDS
或RESET REPLICA
将重置这些列中显示的值。Last_SQL_Errno
,Last_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 GTIDS
或RESET REPLICA
将重置这些列中显示的值。在 MySQL 8.4 中,
Last_SQL_Errno
和Last_SQL_Error
列中显示的所有错误代码和消息都对应于 Server Error Message Reference 中列出的错误值。在之前的版本中并非总是如此。(Bug #11760365, Bug #52768)Replicate_Ignore_Server_Ids
使用
CHANGE REPLICATION SOURCE TO
语句的IGNORE_SERVER_IDS
选项指定的任何服务器 ID,以便副本忽略来自这些服务器的事件。此选项在循环或其他多源复制设置中使用,当其中一台服务器被移除时。如果以这种方式设置了任何服务器 ID,则会显示一个或多个数字的逗号分隔列表。如果没有设置服务器 ID,则该字段为空。注意slave_master_info
表中的Ignored_server_ids
值也显示要忽略的服务器 ID,但作为以空格分隔的列表,前面是总的要忽略的服务器 ID 数量。例如,如果一个包含IGNORE_SERVER_IDS = (2,6,9)
选项的CHANGE REPLICATION SOURCE TO
语句已发出,以告诉副本忽略具有服务器 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_State
为Waiting 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
副本在连接丢失的情况下尝试重新连接到源的次数。可以使用
CHANGE REPLICATION SOURCE TO
语句的SOURCE_RETRY_COUNT
选项设置此值。Source_Bind
副本绑定的网络接口(如果有)。可以使用
CHANGE REPLICATION SOURCE TO
语句的SOURCE_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 在接收
Gtid_log_event
后立即添加。这会导致部分传输的事务将其 GTID 包含在集合中。当由于执行
RESET REPLICA
或CHANGE 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 Sets。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)
有关更多信息,请参见 Section 15.4.2.1, “CHANGE REPLICATION FILTER Statement”。
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 节,“网络命名空间支持”。