Files
aiops/docs/database-migrations.md
Logan.Li fd60361d93 chore: 统一本地服务器与远程仓库源码
- 合并 main 与 master 历史并以服务器结构为基线
- 保留迁移、数据保留、AWS 账单与部署安全能力
- 建立 SDD 规格和 CI 验证闭环
2026-08-05 20:03:25 +08:00

42 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据库版本化迁移
服务进程启动时**不会**执行数据库结构变更。数据库升级必须在备份成功、单实例维护窗口内显式运行迁移命令,避免大 SQLite 库发生隐式重建和 WAL 写放大。 // Logan.Li
## 日常命令
```bash
# 查看已应用与待执行版本
./aiops migrate status --config /srv/aiops/config.yaml
# 全新空数据库:创建初始基线并执行后续迁移
./aiops migrate up --config /srv/aiops/config.yaml
# 已存在的旧数据库:人工核验、备份完成后,只写入基线记录,不改业务表
./aiops migrate baseline --config /srv/aiops/config.yaml
# 旧库完成 baseline 后,执行后续待迁移版本
./aiops migrate up --config /srv/aiops/config.yaml
```
`baseline` 会校验 `iam_users`、`iam_roles`、`asset_servers`、`deploy_pipelines`、`monitor_agent_reports` 等核心表;校验失败时拒绝登记,不能用它绕过不完整库的恢复或专项迁移。 // Logan.Li
## 已上线数据库的切换步骤
1. 停止写入或切换至维护窗口,并完成可恢复备份。
2. 运行 `aiops migrate status`,确认已有 `0001_agent_credentials` 记录仍然存在。
3. 运行 `aiops migrate baseline`,它只登记 `0000_baseline_schema`。
4. 再运行 `aiops migrate up`;`0002_legacy_schema_patches` 会把既有的兼容字段补丁作为可审计迁移执行。
5. 再次运行 `status`,确认所有版本均为 `applied`,然后启动服务。
线上已存在的 `sys_schema_migrations(version, applied_at)` 表保持兼容:迁移框架不会假设额外列,也不会重写既有 `0001_agent_credentials` 记录。 // Logan.Li
若旧业务库甚至尚无 `sys_schema_migrations`,`migrate up` 会零写入拒绝;只能由维护人员先完成备份并显式执行 `migrate baseline`。 // Logan.Li
## 新迁移规则
- 新版本只追加到 `backend/migrations/` 和 `migrations.All()`,禁止修改或重命名已发布版本。
- 需要方言差异的 SQL 使用 `<version>.<sqlite|mysql|postgres>.sql` 三份脚本。
- 复杂或需调用 GORM 的变更使用 Go 迁移函数,但必须返回错误;禁止吞掉 DDL/DML 错误。
- MySQL DDL 可能隐式提交,执行迁移前必须备份;同一数据库同一时间只能运行一个迁移进程。
- SQLite 大表迁移与 `VACUUM` 必须在停写维护窗口执行,迁移完成后再进行 WAL checkpoint 与空间核验。