Skip to content

feat: 数据库迁移前自动备份 - #6360

Merged
jxxghp merged 2 commits into
jxxghp:v3from
InfinityPacer:codex/governance/v3-gov-003
Aug 19, 2026
Merged

feat: 数据库迁移前自动备份#6360
jxxghp merged 2 commits into
jxxghp:v3from
InfinityPacer:codex/governance/v3-gov-003

Conversation

@InfinityPacer

@InfinityPacer InfinityPacer commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

目标

在现有数据库确实存在待执行迁移时,于任何建表或 Alembic 结构变更前创建并校验备份,避免迁移失败后缺少可恢复制品。

主要改动

  • 新增 DB_BACKUP_ON_UPGRADE,默认开启,并继续受 DB_BACKUP_ENABLE 总开关控制。
  • 统一主程序与本地 CLI 的数据库准备入口,在结构写入前校验当前 revision、目标 head 与迁移祖先链。
  • 仅对已有业务表且存在待执行迁移的数据库创建备份;全新数据库、已到最新版本或关闭保护时不生成备份。
  • 备份失败、未知 revision、分叉 revision 或多 head 时直接中止启动,不继续执行 create_all 或 Alembic。
  • 保留本地初始化中“建表后准备超级管理员密码,再执行基础迁移”的既有顺序。

兼容性

  • 不改变插件 SDK、数据库兼容导入或现有备份文件格式。
  • PostgreSQL 迁移复用活动 SQLAlchemy 引擎的真实连接 URL,避免密码被脱敏后的 URL 误用于 Alembic。
  • DB_BACKUP_ENABLE=false 时保持既有启动行为,不启用定时备份或迁移前备份。

验证

  • 后端全量测试:5040 passed, 3 skipped
  • 数据库迁移、调度与架构契约聚焦测试:22 passed
  • 相关生产文件 Pylint:10.00/10
  • SQLite 实测覆盖旧 revision 备份后升级、备份保留旧版本、活动库到达目标版本,以及备份失败时迁移不执行。
  • PostgreSQL 18 实测覆盖 custom-format 归档、pg_restore --list 校验、迁移成功及缺少 pg_dump 时中止迁移。
  • git diff --check 通过。

前端配置入口:jxxghp/MoviePilot-Frontend#687。后端可独立合并并通过环境变量使用该配置。

@jxxghp
jxxghp merged commit 2b3766e into jxxghp:v3 Aug 19, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants