16.3.10 复制延迟
MySQL 5.7 支持延迟复制,以便复制服务器故意在源后面至少延迟指定的时间。默认延迟为 0 秒。使用更改为主的MASTER_DELAY
选项将延迟设置为* N
*秒:
CHANGE MASTER TO MASTER_DELAY = N;
从源接收到的事件要比在源上执行的事件晚至少* N
*秒才执行。唯一的 exception 是格式描述事件或日志文件轮换事件没有延迟,这仅影响 SQL 线程的内部状态。
延迟复制可用于多种目的:
-
防止用户在源上犯错误。 DBA 可以将延迟的副本回滚到灾难发生之前的时间。
-
测试存在滞后时系统的行为。例如,在应用程序中,延迟可能是由于副本上的繁重负载引起的。但是,可能很难生成此负载级别。延迟复制可以模拟延迟,而不必模拟负载。它还可以用于调试与滞后副本有关的条件。
-
无需重新加载备份即可检查数据库的外观。例如,如果延迟是一周,并且 DBA 需要在开发最后几天之前查看数据库的外观,则可以检查延迟的副本。
START SLAVE和STOP SLAVE立即生效,忽略任何延迟。 RESET SLAVE将延迟重置为 0.
显示从站状态具有三个字段,它们提供有关延迟的信息:
-
SQL_Delay
:一个非负整数,指示副本必须滞后于源的秒数。 -
SQL_Remaining_Delay
:当Slave_SQL_Running_State
为Waiting until MASTER_DELAY seconds after master executed event
时,此字段包含一个整数,指示延迟剩余的秒数。在其他时间,此字段为NULL
。 -
Slave_SQL_Running_State
:一个字符串,指示 SQL 线程的状态(类似于Slave_IO_State
)。该值与SHOW PROCESSLIST显示的 SQL 线程的State
值相同。
当复制 SQL 线程在执行事件之前 await 延迟过去时,SHOW PROCESSLIST将其State
值显示为Waiting until MASTER_DELAY seconds after master executed event
。