备份与回滚
“有备份”必须回答四个问题
- 备份包含什么?
- 存在哪里,生产机损坏后还能否访问?
- 最近一次成功是什么时候?
- 是否实际恢复并验证过?
分层准备
| 对象 | 备份/回滚方式 |
|---|---|
| 应用代码 | Git Commit、上一发布目录 |
| 依赖与运行时 | lockfile、Node.js 和系统包版本 |
| Nginx/PM2/systemd | 配置文件及启用状态 |
| 数据库结构 | 迁移记录、向前/向后兼容方案 |
| 数据库数据 | 一致性备份、binlog/PITR(按能力) |
| 上传和持久文件 | 独立备份或对象存储版本 |
| 整机 | 云快照或镜像,确认是否包含数据盘 |
云快照不是数据库一致性的天然保证。高写入数据库应使用数据库支持的备份流程,或在能保证一致性的条件下制作快照。
回滚不是一个动作
- 应用回滚不一定能回滚已经执行的数据库迁移。
- 删除字段后,旧应用也许无法恢复数据。
- 系统包降级可能缺少旧包或存在数据格式变化。
- 恢复快照会覆盖快照之后的新数据。
上线前应写清触发条件、负责人、命令、预计时间和数据损失范围。
恢复演练
在隔离环境中恢复备份,验证应用能启动、表数量和关键数据合理、文件校验通过。只看备份任务“成功”不够。