Skip to main content

Module backup

Module backup 

Source
Expand description

备份/恢复(双模式 + 任务进度)。 备份与恢复(读写,最高风险)。

备份:探测 pg_dump 可用性——可用则子进程生成完整 .sql(--clean --if-exists, 脚本自带 DROP ... IF EXISTS,使恢复幂等),不可用则回退纯 SQL(仅数据)。 备份文件含签名头。 恢复:仅接受本系统生成的备份(签名校验)+ 二次确认 + 路径穿越防护; psql -v ON_ERROR_STOP=1 确保任何 SQL 错误立即中止并报失败(不再假成功); 成功后全量失效文章缓存与 SSR 世代号。 长耗时操作走后台任务 + 进度轮询(见 crate::api::database::tasks)。

兼容性提示--clean --if-exists 是后加的备份参数。本修复之前生成的备份 文件不含 DROP,对其执行恢复会在第一条「relation already exists」处中止并报 失败(行为正确,但无法恢复数据)——需重新创建备份才能恢复。

Structs§

BackupInfo
备份文件元信息(列表展示用)。

Constants§

BACKUP_DIR 🔒
备份目录(项目根,与 uploads/ 平级,gitignored)。
BACKUP_SIGNATURE 🔒
备份文件签名头(恢复时校验,拒绝非本系统文件)。
FILENAME_RE 🔒
文件名白名单正则:仅字母数字下划线点连字符(防路径穿越)。

Functions§

backup_path 🔒
构造 backups/ 下的安全路径(额外防御:校验规范化后仍在 BACKUP_DIR 内)。
create_backup
发起备份,立即返回 task_id,后台任务执行。
delete_backup
删除备份文件。
download_backup
Axum 处理器:下载备份文件(admin 鉴权 + 路径白名单)。 仅 server 构建:纯 Axum 路由(在 main.rs 注册),无 WASM 消费者。
has_valid_signature 🔒
校验备份文件首行是否含本系统签名头。 提取为纯函数:把首行(或全文)作为参数传入,便于单测。
is_valid_backup_filename 🔒
校验备份文件名是否符合白名单(仅字母数字下划线点连字符)。 返回 true 表示安全可用。提取为纯函数便于单测覆盖路径穿越边界。
list_backups
列出 backups/ 目录下的备份文件元信息。
parse_backup_mode 🔒
从备份文件全文提取 -- mode: <value> 行的值(如 “pg_dump”/“sql-fallback”)。 提取为纯函数:把文件内容作为参数传入,便于单测。 缺失或格式不符返回 “unknown”。
read_first_line 🔒
仅读取文件首行(用于签名校验,避免把整个备份文件读入内存)。
read_first_lines 🔒
读取文件前 n 行(用于解析 -- mode: 等头部元信息,避免整文件读入内存)。 不足 n 行时返回实际读到的行;任一行读取失败则整体返回该错误。
restore_backup
发起恢复:校验签名 + 路径穿越防护 + 二次确认,立即返回 task_id。
run_backup 🔒
后台执行备份:pg_dump 优先,不可用回退纯 SQL。
run_pg_dump_backup 🔒
pg_dump 模式:子进程生成完整备份(含 schema),前置签名头。
run_restore 🔒
后台执行恢复:探测 psql,可用则 psql -f,不可用则报告。
run_sql_fallback_backup 🔒
纯 SQL 回退:仅备份数据(不含 schema),按表计数精确进度。