mysql 5.6提供了slave服务器指定落后于master服务器一段时间这样的功能.默认没有延迟,通过指定master_delay=n选项来设置延迟n秒:
change master to master_delay=n;
从master接受的event事件等到过了n秒后才在slave上面执行。不会产生异常,仅仅影响sql线程的内部状态。
延迟复制用于下面的一些场景:
1 保护master上的用户错误。dba可以通过延迟回滚到灾难发生前。
2 当有延迟的时候,测试系统活动状况。如以下例子:在slave上面因为一个大量加载可能导致延迟,那么我们就可以人为模拟这个延迟,虽然大量加载不一定导致延迟。
3 检查数据库之前的一些状况。
- 通过 show slave status 查看到三个方面的信息关于延迟
- sql_delay :非负整数表明延迟与master
- sql_remaining_delay:
当发生等待时,这个地方会有非负整数值。平时,这个地方是null。
- slave_sql_running_state:字符串指定sql线程状态(类似于 slave_io_state)。这个状态与通过show processlist 显示的状态值一致。
当slave sql thread 线程正在延迟等待时,show processlist 显示的它的状态值是等待。the relay-log.info 文件也包含延迟值,因此这个文件格式已经改变。具体看官方文档。
第一次翻译,有些可能不太通顺,欢迎指正探讨。