备份与恢复
AuraBoot 把状态分散持久化在三个相互独立的存储中。一份完整的备份必须覆盖三者,并且在信任它之前,必须在非生产环境上做过恢复演练。
| 存储 | 承载内容 |
|---|---|
| PostgreSQL | 租户数据、动态表(mt_<modelCode>)、审计日志、BPM 状态 |
| Plugin DSL | Model / page / command / permission JSON(配置真源) |
| MinIO(S3 兼容) | 上传的文件、导出的报表、附件 |
只覆盖 PostgreSQL 的备份会丢掉插件升级与上传的文件。只覆盖 DSL 的备份则会丢掉每一条租户记录。
何时使用
- 生产升级之前(见 升级)。
- 在共享环境上重新执行
reset-and-init.sh之前。 - 周期性的灾难恢复计划。
- 执行破坏性操作之前,比如 schema 迁移或大批量数据导入。
工作原理
PostgreSQL 通过 pg_dump 对主节点做转储。该转储是逻辑转储(SQL 或自定义格式),因此可以跨小版本恢复。Plugin DSL 的配置真源是磁盘上的插件目录(model / page / command / permission JSON),直接归档插件源目录即可保存为带版本号的快照。MinIO 通过 mc mirror 对配置的 bucket 做镜像。
三份产物共享一个备份 id,从而支持时点恢复:在同一时间窗口里取得的 PostgreSQL 转储、DSL 归档和对象镜像可以一起回放。
配置与命令
# 1. PostgreSQL 转储(自定义格式,并行 job)
PGPASSWORD="$PG_PASSWORD" pg_dump \
-h "$PG_HOST" -p "$PG_PORT" -U "$PG_USER" \
-d aura_boot \
-Fc -j 4 \
-f "/backups/auraboot-$(date +%Y%m%d-%H%M%S).dump"
# 2. Plugin DSL 归档(直接打包磁盘上的插件源目录)
tar -czf "/backups/auraboot-dsl-$(date +%Y%m%d-%H%M%S).tar.gz" \
-C "$AURA_PLUGINS_DIR" .
# 3. MinIO bucket 镜像
mc mirror --overwrite --remove \
auraboot-prod/aura-files \
/backups/minio/$(date +%Y%m%d-%H%M%S)/在干净的目标环境上恢复:
# 1. 重建数据库(与 reset-and-init.sh 的契约一致)
yes y | ./scripts/reset-db.sh
# 2. 恢复 PostgreSQL 转储
PGPASSWORD="$PG_PASSWORD" pg_restore \
-h "$PG_HOST" -p "$PG_PORT" -U "$PG_USER" \
-d aura_boot -j 4 --clean --if-exists \
/backups/auraboot-20260528-020000.dump
# 3. 回放 DSL(解压插件源目录后,按目录同步导入)
tar -xzf /backups/auraboot-dsl-20260528-020000.tar.gz -C /restore/plugins
curl -sS -X POST -H "Authorization: Bearer $AURA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"path":"/restore/plugins","conflictStrategy":"OVERWRITE"}' \
"$AURA_API_URL/api/plugins/import/import-directory-sync"
# 4. 恢复 MinIO 对象
mc mirror /backups/minio/20260528-020000/ auraboot-prod/aura-files留存策略
一份合理的默认值:
| 级别 | 频率 | 保留 |
|---|---|---|
| 小时级 | 每小时 | 24 小时 |
| 日级 | 当地时间 02:00 | 14 天 |
| 周级 | 周日 02:00 | 8 周 |
| 月级 | 每月 1 号 | 12 个月 |
按合规要求与存储预算调整。至少保留一份异地副本。
验证
- 转储文件非空,且
pg_restore --list打印出预期的 schema。 - 用昨晚的备份在 staging 环境恢复后能正常启动,
/actuator/health返回UP,并能完成端到端的登录加列表页渲染。 - DSL 回放完成且零
references unregistered handler错误(见 插件开发)。 - 恢复后 MinIO bucket 的文件数与总字节数在允许误差内与源端一致。
- 恢复演练至少每季度一次;从未验证过的备份等于没有备份。