Expand description
备份/恢复(双模式 + 任务进度)。 备份与恢复(读写,最高风险)。
备份:探测 pg_dump 可用性——可用则子进程生成完整、角色无关的 .sql
(--clean --if-exists --no-owner --no-privileges),不可用则回退纯 SQL(仅数据)。
备份文件含签名头。每次备份按设置附带 uploads 素材打包(_uploads.tar.gz,
排除可重建的 .cache/),与 .sql 成对展示/下载/删除。
来源标记:手动备份文件名前缀 backup_,定时任务自动备份前缀 auto_;
自动备份按 backup_retention_count 轮转(只删自动,手动永不自动删)。
恢复:仅接受本系统生成的备份(签名校验)+ 二次确认 + 路径穿越防护;
旧备份的 pg_dump 属主语句会在 COPY 感知的预处理阶段移除,再由
psql --single-transaction -v ON_ERROR_STOP=1 原子重放,失败时完整回滚;
仅恢复数据库——uploads 需从配对 tar.gz 手动还原;成功后全量失效缓存。
长耗时操作走后台任务 + 进度轮询(见 crate::api::database::tasks)。
导入:POST /api/database/backups/import(纯 Axum 路由,multipart 流式落盘)
把本机备份回灌进 backups/。两步式——导入只入库,恢复仍走上述管线。
导入时即强制签名校验(外来 SQL 拒收不留盘);保留原始文件名、同名冲突拒绝;
.tmp 落盘 + 原子 rename,半截文件永不出现在列表。上限 BACKUP_IMPORT_MAX_MB
(默认 512MB),路由层 DefaultBodyLimit + 流式计数双保险。
兼容性提示:未使用 --clean --if-exists 生成的旧备份不含 DROP,
恢复到已有表的数据库会在「relation already exists」处中止并回滚,
需重新创建完整备份才能覆盖已有数据库。
Modules§
- commands 🔒
- PostgreSQL 命令构造:通过 PG 环境变量传递连接,备份去除属主和 ACL。
- creation 🔒
- 数据库备份执行、进度更新与 uploads 素材打包。
- files 🔒
- 备份命名、签名、元信息、配对归档与自动轮转。
- restore 🔒
- COPY 感知的 SQL 预处理、原子恢复、临时文件清理与缓存失效。
- transfer 🔒
- 管理员备份导入和下载 HTTP 处理器。
Structs§
- Backup
Info - 备份文件元信息(列表展示用)。
- Backup
RunOutcome 🔒 - 一次备份运行的结果(调度任务据此落库 last_run)。
- Create
Backup - Serialized arguments for the
create_backupserver function. - Delete
Backup - Serialized arguments for the
delete_backupserver function. - List
Backups - Serialized arguments for the
list_backupsserver function. - Restore
Backup - Serialized arguments for the
restore_backupserver function.
Enums§
- Backup
Origin 🔒 - 备份来源:决定文件名前缀与是否参与自动轮转。
Constants§
- MULTIPART_
FRAME_ 🔒SLACK - multipart 框架开销宽限,加在路由 body limit 上;流式计数只计算载荷。
Functions§
- create_
backup - 发起备份,立即返回 task_id,后台任务执行。已有备份在跑时拒绝。
- delete_
backup - 管理员删除备份文件,并清理配对的 uploads 归档。
- download_
backup - Axum 处理器:下载备份文件(admin 鉴权 + 路径白名单)。 仅 server 构建:纯 Axum 路由(在 main.rs 注册),无 WASM 消费者。
- import_
backup - Axum 处理器:导入备份(multipart 流式落盘,admin 鉴权 + 签名校验 + 同名拒绝)。
- list_
backups - 列出 SQL 备份,并附带配对 uploads 归档的元信息。
- restore_
backup - 发起恢复:校验签名 + 路径穿越防护 + 二次确认,立即返回 task_id。