滚动部署期间改库结构会撞上旧容器的锁
为什么
- 滚动部署的设计就是新旧容器重叠:新容器起来、健康后旧容器才退出。
- SQLite 是单机文件锁模型,切换 journal mode、重写库文件这类操作需要没有其他连接。
- 于是迁移在拿锁处被拒。此时保护逻辑起了作用:旧库和在线服务都没坏(这是好事,不是失败)。
正确处理
- 需要一次短暂停机窗口(先停旧实例、再迁移、再起新实例),而不是在滚动部署中硬试。
- 停机前必须先有可恢复备份:优先用平台提供的卷级 backup/snapshot;平台没有,才自己加管理员下载备份通道。
- 绝不在没有备份的情况下替换/重写生产数据库。
相关
- 停机前先确认有可恢复备份
- 改远端库结构前先确认库身份与回滚 —— 同族:改远端持久结构前先确认影响面与回滚
- 功能缺失先确认运行的是哪份产物