chore: 统一本地服务器与远程仓库源码
- 合并 main 与 master 历史并以服务器结构为基线 - 保留迁移、数据保留、AWS 账单与部署安全能力 - 建立 SDD 规格和 CI 验证闭环
This commit is contained in:
commit
fd60361d93
460 files changed
+37492
-23871
No files matched your search
@@ -0,0 +1,41 @@
|
||||
# 数据库版本化迁移
|
||||
|
||||
服务进程启动时**不会**执行数据库结构变更。数据库升级必须在备份成功、单实例维护窗口内显式运行迁移命令,避免大 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 与空间核验。
|
||||
Reference in new issue
Block a user