季度演练把应用流量切到备机房,全部通过。真出事那天主库所在机房断电,才发现备库延迟 40 分钟,切换脚本里没有提升备库的步骤。日志里能对上时间点,这种反而好排。

演练范围只覆盖了无状态服务,数据库 缓存 消息队列这些有状态的组件没进清单。切换脚本假定主库一直可用,没有做主库不可达的分支。这一点先确认清楚,后面就不用反复试。

mysql -h standby -e 'SHOW SLAVE STATUS\G' | grep -E 'Seconds_Behind_Master|Slave_IO_Running'
mysql -h standby -e 'SELECT @@read_only'

围绕「演练漏数据库」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

处理上按这个顺序:把组件列成清单 逐个标注故障时的动作和负责人;补主库不可达的演练场景 包括备库提升和延迟校验;演练前先确认备库延迟在秒级 否则切过去也是旧数据;每次演练记录未覆盖项 下次优先补上。

结果对不对很好判断,主库停机演练中,备库在 2 分钟内完成提升,切换后写入正常,延迟指标归零。

作者 9823189