一次包含数据库字段变更的发布出问题,想回滚发现旧代码不认新字段,只能连夜再发一版修复。从故障到恢复用了 2 小时 40 分。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
git revert --no-commit <sha> git log --oneline -3 mysql -e 'SHOW COLUMNS FROM orders LIKE "channel"'
PR 描述里没有回滚方案,评审也没问。数据库变更和代码变更耦合在同一次发布里,回退代码回退不了结构。这一点先确认清楚,后面就不用反复试。
碰到「回滚方案缺失」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,PR 模板加回滚方案一栏 没填不能提交评审;数据库变更拆成兼容的两次发布 先加字段再用;回滚脚本和发布脚本一起评审;发布前演练一次回滚 记录耗时。
改完照着核一遍,每个 PR 都有可执行的回滚步骤,演练回滚耗时在 10 分钟以内。
