# Plane CE 备份方案(DB-only)— DRAFT (2026-09-03), 未应用 > 关联:`plane-backup.yaml`(CronJob);追踪:Plane vps 项目条目(记录源,2026-09-03 起不用 Linear)。 > 现状(实测):pg 全库 **88 MB**(310 issues / 1 user);MinIO uploads **264 KB**(几乎空)。 ## 范围决策(2026-09-03,实际角度) - **做:PostgreSQL 逻辑备份** —— 覆盖现实故障(误删、升级失败、磁盘坏、重装),成本≈0。 - **不做:MinIO/附件备份** —— 桶仅 264 KB,个人实例附件可接受丢失;不为它付日常维护。 日后附件明显变多再按原完整版思路加 `mc mirror`(历史版本见本目录 git 历史/Plane 条目评论)。 - 异机同步暂不启用(见下"局限/阻塞")。 ## 方案 集群内 CronJob(ns `plane`,每天 **01:30 UTC = 03:30 本地**,控制器按 UTC 跑): 1. 单容器 `postgres:15.7-alpine`:`pg_dump -Fc`(自定义压缩格式)打 `plane` 库 → `/var/backups/plane/pg/plane-.dump`(hostPath `DirectoryOrCreate`) 2. 保留 7 天(`find -mtime +7 -delete`),成功/失败历史各留 3/2 3. 凭据:现 chart Secret `plane-app-pgdb-secrets`(Phase A 外部化后改 `plane-pgdb-credentials`) ## 容量 - 库 88 MB → `-Fc` 快照约 10–40 MB/天 × 7 天 ≈ **<300 MB**,对 83 G 可用盘可忽略。 ## 还原(未演练;应用前先做一次隔离测试) ```bash # 目标 PG15 实例(临时起一个 postgres:15.7-alpine 容器或另一台机): # 先建空库: createdb plane (user=plane) pg_restore -h -U plane -d plane --clean --if-exists /var/backups/plane/pg/plane-.dump # 还原后确认 310 issues 量级一致;附件为空属预期(未备份 MinIO) ``` ## 验收(应用前逐项过) - [ ] CronJob 建立后手动触发一次:`kubectl -n plane create job --from=cronjob/plane-backup plane-backup-manual-1`,Job `Completed` - [ ] `/var/backups/plane/pg/plane-*.dump` 可被 `pg_restore -l` 列出 - [ ] 备份 Job 只依赖 pgdb 服务,不依赖 Plane 应用 Pod(应用故障期间也能出备份) - [ ] 保留清理 dry-run(`find ... -print`)正确;`df -h /` 前后对比记录 ## 局限 / 阻塞 - **本地方案不是离机备份**:单节点磁盘/整机故障即丢。如日后要离机,纳入 [Restic 异机 repository 决策与存取隔离](https://plane.chans.xyz/space/projects/56874283-7e1d-43a8-afa4-631cf1c4ad5b/issues/7825d564-ae15-446b-bced-be26b648346b/) (与 Matrix 备份同一决策);恢复演练纪律见 [服务级 restore runbook 与隔离复元演练](https://plane.chans.xyz/space/projects/56874283-7e1d-43a8-afa4-631cf1c4ad5b/issues/a9bea3ba-c958-4a74-b2f1-6bbb653f21d3/)。 - 提醒:同一节点 **Matrix 数据价值远高于 Plane 且同样无备份** —— 若投入备份精力,顺序上 Matrix 优先。