mysql的延迟备份节点指的是从库同步主库数据时,刻意让数据回放延迟指定时间,这样当主库出现误删数据、错误更新等问题时,延迟节点还保留着故障前的数据,能快速完成数据恢复,避免业务长时间中断。

延迟备份节点的实现原理
mysql的主从复制流程分为三个步骤:主库将写操作记录到binlog二进制日志中,从库的IO线程拉取主库的binlog到本地保存为relay_log中继日志,从库的SQL线程回放relay_log中的操作完成数据同步。延迟备份节点的核心就是控制SQL线程的回放时间,让它在接收到relay_log后,等待指定的延迟时长再执行。
基于原生复制配置延迟备份节点
1. 前置条件准备
首先需要确保主从复制的基础环境已经搭建完成,主库开启binlog,从库已经配置好主库的连接信息,并且主从复制状态正常运行。可以通过以下命令查看主从状态:
-- 主库查看binlog状态 SHOW MASTER STATUS; -- 从库查看复制状态 SHOW SLAVE STATUSG;
2. 配置延迟参数
mysql提供了slave_delay参数用于控制从库的延迟回放时长,单位是秒。只需要在从库执行以下命令即可设置延迟时间:
-- 停止从库的SQL线程,IO线程保持运行 STOP SLAVE SQL_THREAD; -- 设置延迟时间为3600秒,也就是1小时 CHANGE MASTER TO MASTER_DELAY = 3600; -- 启动从库的SQL线程 START SLAVE SQL_THREAD;
如果从库还没有配置主从复制,也可以在初始配置主从的时候直接加上延迟参数:
CHANGE MASTER TO MASTER_HOST='主库ip', MASTER_PORT=3306, MASTER_USER='复制账号', MASTER_PASSWORD='复制账号密码', MASTER_LOG_FILE='主库binlog文件名', MASTER_LOG_POS=主库binlog位置, MASTER_DELAY=3600;
3. 验证延迟配置是否生效
配置完成后,再次查看从库的复制状态,重点关注Seconds_Behind_Master字段和SQL_Delay字段:
SHOW SLAVE STATUSG;
正常情况下SQL_Delay会显示你设置的延迟秒数,Seconds_Behind_Master会随着时间逐渐接近设置的延迟值,说明延迟配置已经生效。
延迟备份节点的使用场景
- 误操作恢复:当主库执行了误删表、误更新全表等操作时,停止延迟节点的同步,导出需要的数据恢复到主库即可
- 数据审计:可以查看延迟节点在某个时间点的历史数据状态,满足审计需求
- 测试环境构造:可以将延迟节点的数据恢复到某个历史时间点,用于测试历史场景的问题
注意事项
延迟备份节点的延迟时间需要根据业务需求合理设置,通常建议设置为1到6小时,时间太短起不到防护作用,时间太长会占用更多的存储空间保存relay_log。另外需要注意relay_log的自动清理机制,避免relay_log被提前删除导致延迟回放失败,可以通过设置relay_log_purge参数为0关闭自动清理,或者调整relay_log_expire_logs_seconds参数延长relay_log的保留时间。
如果需要临时取消延迟,只需要将MASTER_DELAY设置为0,然后重启从库的SQL线程即可:
STOP SLAVE SQL_THREAD; CHANGE MASTER TO MASTER_DELAY = 0; START SLAVE SQL_THREAD;