MySQL 5.7 支持延迟复制,这样副本服务器就会故意落后于源服务器至少一段指定的时间。默认延迟为 0 秒。使用
MASTER_DELAY
选项
CHANGE MASTER TO
将延迟设置为N
秒:
CHANGE MASTER TO MASTER_DELAY = N;
从源接收到的事件至少
N
比它在源上的执行晚几秒才执行。例外情况是格式描述事件或日志文件轮换事件没有延迟,它们只影响 SQL 线程的内部状态。
延迟复制可用于多种目的:
防止用户在源上犯错。DBA 可以将延迟的副本回滚到灾难发生之前的时间。
测试系统在出现滞后时的行为。例如,在应用程序中,滞后可能是由副本上的负载过重引起的。但是,可能很难生成此负载级别。延迟复制可以模拟滞后,而不必模拟负载。它还可用于调试与滞后副本相关的条件。
检查数据库很久以前的样子,而无需重新加载备份。例如,如果延迟一周并且 DBA 需要查看数据库在过去几天的开发之前的样子,则可以检查延迟的副本。
START SLAVE
并
STOP SLAVE
立即生效,忽略任何延迟。RESET SLAVE
将延迟重置为 0。
SHOW SLAVE STATUS
具有三个字段,提供有关延迟的信息:
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
)。该值与State
显示的 SQL 线程的值相同SHOW PROCESSLIST
。
当复制 SQL 线程在执行事件之前等待延迟结束时,SHOW
PROCESSLIST
将其State
值显示为Waiting until MASTER_DELAY seconds after master
executed event
。