延迟从库的用途
延迟从库是一台故意落后主库固定时长的副本:它持续接收并保存来自主库的 binlog,但重放动作被推迟 N 秒。当发生误删表、误改数据这类人为事故时,只要在延迟窗口内发现,就可以停掉它的重放线程,把被删的数据捞出来补回主库。它是一份随取随用的时间机器,本质上仍是人肉防线。
基本信息
| 适用平台 | MySQL 5.7 / 8.0 |
|---|---|
| 核心参数 | CHANGE REPLICATION SOURCE TO SOURCE_DELAY = N(秒) |
| 窗口设置 | 常见 1-6 小时,按业务误操作的发现与恢复需求确定 |
| 代价 | 该副本不能用于实时读扩展与故障切换 |
| 捞数方式 | STOP REPLICA SQL_THREAD 后查询或导出,再恢复重放 |
典型使用场景
- 核心库误删数据后的快速回捞,避免走全量恢复流程
- 误执行批量 UPDATE 后,比对延迟副本上的旧数据做修正
- 高风险变更前后的兜底,例如上线前的表结构调整
- 合规要求保留历史时点数据视图的场景
- 演练误操作恢复流程,验证延迟窗口是否够用
配置与观察
配置与观察
-- 停止重放后设置延迟并重新启动
STOP REPLICA;
CHANGE REPLICATION SOURCE TO SOURCE_DELAY = 3600;
START REPLICA;
-- 观察延迟量与实际剩余等待时间
SHOW REPLICA STATUS\G
-- 关注:SQL_Delay: 3600,SQL_Remaining_Delay: 递减
-- 应急流程:误操作发现后在窗口内暂停重放,导出被删数据
STOP REPLICA SQL_THREAD;
-- 查询或导出目标数据后,再恢复重放
START REPLICA SQL_THREAD;使用要点
| 项 | 说明 | 注意 |
|---|---|---|
| 窗口长度 | 按业务能多快发现误操作来定 | 定得太短等于没有保护 |
| 重放线程 | 延迟体现在 SQL 线程,IO 线程正常跟随 | 只停 SQL 线程即可保留窗口 |
| 复制监控 | 延迟数值长期等于设定值属正常 | 不能按常规延迟告警口径判断 |
| 使用禁区 | 不做读扩展、不参与故障切换 | 混用会导致业务读到旧数据 |
延迟副本与备份体系互补而非替代:它能覆盖「刚发生的人为误操作」,全量恢复仍要靠备份,两者都要有。
误操作发生后如果惊慌中直接 START REPLICA 追平延迟,窗口数据会被重放覆盖,捞数机会转瞬即逝,应急步骤必须先停重放再操作。