参考官方文档 :
https://dev.mysql.com/doc/refman/5.7/en/replication-administration.html
16.1.7.1 检查复制状态
管理复制过程时常见的任务是确保复制的进行,并且从站和主站之间没有错误。
必须在每个从站上执行的SHOW SLAVE STATUS语句提供有关从站服务器和主服务器之间连接的配置和状态的信息。 从MySQL 5.7开始,performance方案具有复制表,以更易于访问的形式提供此信息。
SHOW STATUS语句还提供了一些与复制从属有关的信息。 从MySQL 5.7.5版开始,不推荐使用以前使用SHOW STATUS监视的以下状态变量并将其移至Performance Schema复制表:
- Slave_retried_transactions
- Slave_last_heartbeat
- Slave_received_heartbeats
- Slave_heartbeat_period
- Slave_running
通过性能模式复制表中显示的复制心跳信息,您可以检查复制连接是否处于活动状态,即使主服务器近未向从服务器发送事件也是如此。 如果二进制日志中没有比心跳间隔更长的更新,并且没有未发送的事件,则主设备向从设备发送心跳信号。 主服务器上的MASTER_HEARTBEAT_PERIOD设置(由CHANGE MASTER TO语句设置)指定心跳的频率,默认为从服务器的连接超时间隔的一半(slave_net_timeout)。 replication_connection_status性能架构表显示复制从站收到新心跳信号的时间,以及它收到的心跳信号的数量。
SHOW SLAVE STATUS\G 的部分信息:
- Slave_IO_State:从站的当前状态
- Slave_IO_Running:用于读取主机二进制日志的I / O线程是否正在运行。 通常,除非尚未启动复制或已使用STOP SLAVE显式停止复制,否则您希望此为“yes”。
- Slave_SQL_Running:用于在中继日志中执行事件的SQL线程是否正在运行。 与I/O线程一样,通常应为Yes。
- Last_IO_Error,Last_SQL_Error:处理中继日志时I / O和SQL线程注册的后一个错误。 理想情况下,这些应为空白,表示没有错误。
- Seconds_Behind_Master:从属SQL线程处理主二进制日志的落后秒数。 高数字(或增加数字)可以表示从属设备无法及时处理来自主设备的事件。
Seconds_Behind_Master的值0通常可以解释为意味着slave已经赶上了master,但在某些情况下,这并非严格正确。 例如,如果主站和从站之间的网络连接断开但从站I / O线程尚未注意到这一点,即slave_net_timeout尚未经过,则会发生这种情况。
Seconds_Behind_Master的瞬态值也可能无法准确反映情况。 当从属SQL线程赶上I/O时,Seconds_Behind_Master显示0; 但是当从属I / O线程仍在排队新事件时,Seconds_Behind_Master可能会显示一个较大的值,直到SQL线程完成新事件的执行。 当事件具有旧时间戳时,这尤其可能; 在这种情况下,如果您在相对较短的时间内多次执行SHOW SLAVE STATUS,您可能会看到此值在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线程执行中继日志的位置。 这些对应于前面的坐标,但是以从中继日志坐标而不是主二进制日志坐标表示。
在主服务器上,您可以使用SHOW PROCESSLIST检查已连接从服务器的状态,以检查正在运行的进程列表。 从属连接在Command 字段中具有Binlog Dump:
mysql> SHOW PROCESSLIST \G;
由于它是驱动复制过程的从属服务器,因此本报告中提供的信息非常少。
对于使用--report-host选项启动并连接到主服务器的从服务器,主服务器上的SHOW SLAVE HOSTS语句显示有关从服务器的基本信息。 输出包括从属服务器的ID, - report-host选项的值,连接端口和主ID:
mysql> SHOW SLAVE HOSTS;
16.1.7.2 在Slave上暂停复制
您可以使用STOP SLAVE和START SLAVE语句在从站上停止并启动复制。
要停止从主服务器处理二进制日志,请使用STOP SLAVE:
mysql> STOP SLAVE;
当复制停止时,从I / O线程停止从主二进制日志读取事件并将它们写入中继日志,并且SQL线程停止从中继日志读取事件并执行它们。 您可以通过指定线程类型单独暂停I / O或SQL线程:
mysql> STOP SLAVE IO_THREAD;
mysql> STOP SLAVE SQL_THREAD;
要再次开始执行,请使用START SLAVE语句:
mysql> START SLAVE;
要启动特定线程,请指定线程类型:
mysql> START SLAVE IO_THREAD;
mysql> START SLAVE SQL_THREAD;
对于仅通过处理来自主服务器的事件来执行更新的从服务器,如果要执行备份或其他任务,则仅停止SQL线程可能很有用。 I / O线程将继续从主服务器读取事件但不执行它们。 这使得从服务器在重新启动SQL线程时更容易赶上。
仅停止I / O线程使中继日志中的事件能够被SQL线程执行,直到中继日志结束。 当您希望暂停执行以赶上已从主服务器接收的事件时,当您希望对从服务器执行管理但同时确保它已处理了对特定点的所有更新时,这可能很有用。 当您在主服务器上执行管理时,此方法还可用于暂停从服务器上的事件接收。 停止I / O线程但允许SQL线程运行有助于确保在再次启动复制时不会发生大量事件积压。