17.3.10 延迟复制

MySQL 5.6 支持延迟复制,这样副本服务器就会故意落后于源服务器至少一段指定的时间。默认延迟为 0 秒。使用 MASTER_DELAY选项 CHANGE MASTER TO将延迟设置为N秒:

CHANGE MASTER TO MASTER_DELAY = N;

从源接收到的事件至少 N比它在源上的执行晚几秒才执行。例外情况是格式描述事件或日志文件轮换事件没有延迟,它们只影响 SQL 线程的内部状态。

延迟复制可用于多种目的:

  • 防止用户在源上犯错。DBA 可以将延迟的副本回滚到灾难发生之前的时间。

  • 测试系统在出现滞后时的行为。例如,在应用程序中,滞后可能是由副本上的负载过重引起的。但是,可能很难生成此负载级别。延迟复制可以模拟滞后,而不必模拟负载。它还可用于调试与滞后副本相关的条件。

  • 检查数据库很久以前的样子,而无需重新加载备份。例如,如果延迟一周并且 DBA 需要查看数据库在过去几天的开发之前的样子,则可以检查延迟的副本。

START SLAVESTOP 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

relay-log.info文件现在包含延迟值,因此文件格式已更改。请参阅 第 17.2.2.2 节,“复制元数据存储库”。特别是,文件的第一行现在指示文件中有多少行。如果将副本服务器降级到早于 MySQL 5.6 的版本,则旧服务器无法正确读取文件。要解决此问题,请在文本编辑器中修改文件以删除包含行数的初始行。