Skip to main content

Module backup

Module backup 

Source
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§

BackupInfo
备份文件元信息(列表展示用)。
BackupRunOutcome 🔒
一次备份运行的结果(调度任务据此落库 last_run)。
CreateBackup
Serialized arguments for the create_backup server function.
DeleteBackup
Serialized arguments for the delete_backup server function.
ListBackups
Serialized arguments for the list_backups server function.
RestoreBackup
Serialized arguments for the restore_backup server function.

Enums§

BackupOrigin 🔒
备份来源:决定文件名前缀与是否参与自动轮转。

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。