首页/数据/数据库速查/延迟从库(SOURCE_DELAY 误操作保护)
主从复制与高可用53 条

延迟从库(SOURCE_DELAY 误操作保护)

故意落后 N 秒的从库:误删/误改发生后,在延迟窗口内可从中捞回;配置 SOURCE_DELAY=3600(秒),配合 RELAY 观察 SQL_Delay 与剩余时间。

数据库速查数据更新于 2026-10-13

延迟从库的用途

延迟从库是一台故意落后主库固定时长的副本:它持续接收并保存来自主库的 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 追平延迟,窗口数据会被重放覆盖,捞数机会转瞬即逝,应急步骤必须先停重放再操作。

易错点

  • 把延迟副本临时当只读库用:业务拿到的是落后一小时的数据,会被当成数据错乱投诉
  • 延迟窗口设得太短:只落后几分钟,值班发现事故时早已追平,起不到保护作用
  • 复制中断无人监控:延迟副本停止接收后窗口数据不再更新,误以为仍有兜底
  • 误操作后先追平延迟再想捞数据:窗口内的旧值被覆盖,只能回退到全量恢复

数据来源与参考

  • MySQL 8.0 Reference Manual: Delayed Replication

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌