16.3.10 复制延迟

MySQL 5.7 支持延迟复制,以便复制服务器故意在源后面至少延迟指定的时间。默认延迟为 0 秒。使用更改为主MASTER_DELAY选项将延迟设置为* N *秒:

CHANGE MASTER TO MASTER_DELAY = N;

从源接收到的事件要比在源上执行的事件晚至少* N *秒才执行。唯一的 exception 是格式描述事件或日志文件轮换事件没有延迟,这仅影响 SQL 线程的内部状态。

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

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

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

  • 无需重新加载备份即可检查数据库的外观。例如,如果延迟是一周,并且 DBA 需要在开发最后几天之前查看数据库的外观,则可以检查延迟的副本。

START SLAVESTOP SLAVE立即生效,忽略任何延迟。 RESET SLAVE将延迟重置为 0.

显示从站状态具有三个字段,它们提供有关延迟的信息:

  • SQL_Delay:一个非负整数,指示副本必须滞后于源的秒数。

  • SQL_Remaining_Delay:当Slave_SQL_Running_StateWaiting 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