管理复制过程时最常见的任务是确保复制正在进行,并且副本和源之间没有错误。
的显示副本|从站状态
语句,您必须在每个副本上执行该语句,它提供关于副本服务器和源服务器之间的连接的配置和状态的信息。从MySQL 8.0.22,显示奴隶状态
已弃用,并且显示副本状态
可改为使用。性能模式具有复制表,以更易于访问的形式提供此信息。看到第27.12.11节,“性能模式复制表”.
Performance Schema复制表中显示的复制心跳信息允许您检查复制连接是否处于活动状态,即使源最近没有向副本发送事件。如果二进制日志中没有更新,也没有未发送的事件,且时间长于心跳间隔,则源将向副本发送心跳信号。的MASTER_HEARTBEAT_PERIOD
源上的设置(由将master更改为
语句)指定心跳频率,默认为副本连接超时间隔的一半(由系统变量指定)replica_net_timeout
或slave_net_timeout
).的replication_connection_status
Performance Schema表显示副本最近接收心跳信号的时间,以及它已经接收了多少心跳信号。
如果您正在使用显示副本|从站状态
语句检查单个副本的状态,该语句提供以下信息:
mysql >显示复制状态\ G *************************** 1。row *************************** Replica_IO_State: Waiting for source to send event Source_Host: source1 Source_User: root Source_Port: 3306 Connect_Retry: 60 Source_Log_File: mysql-bin.000004Read_Source_Log_Pos: 931 Relay_Log_File: replica1-relay-bin.000056Relay_Log_Pos: 950 Relay_Source_Log_File: mysql-bin.000004Replica_IO_Running:是的Replica_SQL_Running:是的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: 931 Relay_Log_Space: 1365 Until_Condition:没有Until_Log_File: Until_Log_Pos: 0 Source_SSL_Allowed:没有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: 0
状态报告中需要检查的关键字段有:
Replica_IO_State
:副本的当前状态。看到第8.14.5节,复制I/O线程状态,第8.14.6节“复制SQL线程状态”,以获取更多资料。Replica_IO_Running
:读取源二进制日志的I/O线程是否正在运行。通常,你希望它是是的
除非您尚未开始复制或已显式地使用停止复制|从站
.Replica_SQL_Running
:执行中继日志中事件的SQL线程是否正在运行。与I/O线程一样,通常应该是这样是的
.Last_IO_Error
,Last_SQL_Error
: I/O和SQL线程在处理中继日志时注册的最后一个错误。理想情况下,这些应该是空白的,表示没有错误。Seconds_Behind_Source
:复制SQL线程在处理源二进制日志后的秒数。数值高(或不断增加的数值)可能表明副本无法及时处理来自源的事件。的值为0
Seconds_Behind_Source
通常可以解释为副本已经赶上了源文件,但在某些情况下,这并不完全正确。例如,如果源和副本之间的网络连接中断,但复制I/O线程还没有注意到这一点,就会发生这种情况;即设定的时间段replica_net_timeout
或slave_net_timeout
尚未过去。的瞬态值也有可能
Seconds_Behind_Source
可能不能准确反映情况。当复制SQL线程完成I/O时,Seconds_Behind_Source
显示0;但是当复制I/O线程仍然在排队等待一个新事件时,Seconds_Behind_Source
可能会显示一个很大的值,直到复制SQL线程完成执行新事件。当事件具有旧的时间戳时,这种情况尤其可能发生;在这种情况下,如果执行显示副本|从站状态
在相对较短的时间内,您可能会看到这个值在0和一个相对较大的值之间反复变化几次。
有几对字段提供了副本从源二进制日志中读取事件并在中继日志中处理它们的进度信息:
(
Master_Log_file
,Read_Master_Log_Pos
):源二进制日志中的坐标,表示复制I/O线程从该日志中读取事件的距离。(
Relay_Master_Log_File
,Exec_Master_Log_Pos
):源二进制日志中的坐标,指示复制SQL线程执行从该日志接收到的事件的距离。(
Relay_Log_File
,Relay_Log_Pos
):复制中继日志中的坐标,表示复制SQL线程执行中继日志的距离。这些对应于前面的坐标,但表示为复制中继日志坐标,而不是源二进制日志坐标。
在源端,可以使用检查已连接副本的状态显示PROCESSLIST
检查正在运行的进程的列表。复制连接具有Binlog转储
在命令
字段:
mysql> SHOW PROCESSLIST \G;*************************** 4所示。行*************************** Id: 10用户:root主机:replica1:58371 db: NULL命令:Binlog Dump时间:777状态:已将所有Binlog发送到slave;等待binlog更新信息:NULL
由于驱动复制过程的是副本,因此该报告中提供的信息很少。
对于以。开始的副本——主持人
选项和被连接到源的显示副本|显示从主机
语句显示关于副本的基本信息。的值——主持人
选项,连接端口和源ID:
mysql>:+-----------+----------+------+-------------------+-----------+ | 主机Server_id | | |港口Rpl_recovery_rank | Source_id | +-----------+----------+------+-------------------+-----------+ | 10 | replica1 | 3306 | 0 | 1 | +-----------+----------+------+-------------------+-----------+ 1行集(0.00秒)