cat case/PM-2017-0045.md

Etsy 2017 本应小修复的部署意外升级运行中的生产数据库,停服做完整性检查

P1 · Etsy 本应小修复的部署意外升级运行中的生产数据库,停服

summary

2017 年,Etsy 计划做一次本应很小的安全修复部署,却因部署流程缺陷意外升级了正在运行的生产数据库,导致需要停服做数据库完整性检查,网站相关功能中断数小时。

timeline

工程执行一次预期很小的修复部署;部署流程错误地将变更应用到运行中的生产数据库并触发升级;为保护数据一致性,Etsy 停服执行完整性检查与修复;数小时后恢复。

root_cause

部署工具/流程未能将「小修复」与「数据库升级」隔离,错误地在实际生产库上执行了升级动作。本质是部署流程缺少对生产数据库操作的隔离与二次确认。

amplifiers

① 部署流程缺陷使小变更演变为生产库升级。② 为保护数据被迫停服做完整性检查。③ 恢复慢(需逐库校验)。④ 影响面向用户的网站功能。

mitigation

修复部署流程,将数据库变更隔离到受控窗口并做预发验证;恢复后加强部署评审。

lessons

生产数据库变更必须走独立、受控、可评审的流程;部署工具要将「应用代码」与「数据结构变更」严格分离;关键部署双人复核。

checklist

① 部署流程分离应用与数据库变更。② 生产库变更走受控窗口+预发验证。③ 关键部署双人复核。④ 数据库变更前备份与回滚预案。