首页 / 运维与参考

数据备份与恢复

本地备份定时与保留策略、加密备份、远程同步(S3/R2/FTP/SFTP/SSH/WebDAV)、备份日志,以及在服务器上手动恢复的步骤。

数据备份用于在误操作、服务器故障、磁盘损坏或迁移时能找回数据。后台「数据备份」下有三个页面:

页面 路由 用途
本地备份 /dataBackup/localBackup 在当前服务器生成备份:定时、保留策略、加密、立即备份
远程备份 /dataBackup/remoteBackup 把已生成的本地备份同步到外部存储做异地保存
备份日志 /dataBackup/backupLog 查看备份与同步的结果、耗时、大小、失败原因

建议把它理解成两层保护:先在本机生成备份文件(快),再同步到异地(防止服务器整体损坏时备份一起丢失)。远程同步不能替代本地备份,因为它同步的就是本地备份目录里的文件。

后台没有「一键恢复」

当前后台只提供备份和同步,没有在界面里恢复数据的按钮。恢复需要在服务器上手动操作,见本页数据恢复。

订阅功能

「数据备份、远程同步」属于订阅能力(见订阅与高级功能一览),未获得授权时部分配置不可用。

使用前准备

准备项 说明
服务器空间 本地备份占磁盘,预留足够容量并设置保留策略
保存目录 使用专门的备份目录,不要和上传资源目录、程序目录混在一起
pg_dump 数据库备份由服务器调用 PostgreSQL 的 pg_dump 导出,服务器上需要能执行该命令(安装 PostgreSQL 客户端工具)
远程账号 需要远程同步时提前准备对象存储、FTP、SFTP、SSH 或 WebDAV 账号

本地备份

本地备份
本地备份

基本配置

配置项 说明
启用本地备份 开启后按周期自动备份;关闭则定时备份不执行,仍可手动「立即备份」
备份周期 每天 / 每周 / 每月
备份时区 判断任务按哪个地区时间执行;默认 Asia/Shanghai
备份时间 默认 03:30,建议选访问低峰
每周执行日 / 每月执行日 周期为每周/每月时出现;每月选 29/30/31 号遇到没有该日期的月份,按当月最后一天处理

改完后必须点击「保存配置」才生效。

本地保存目录

默认值为 /data/backups/facai-cms。保存配置或立即备份时系统会检查目录:不存在会尝试创建,不可写会提示错误。不要填上传资源目录或临时目录。

保留策略

策略 需要填写 默认值
按备份数保留 最大保留份数 14
按天数保留 最大保留天数 30
按空间上限保留 最大存储空间(GB) 120

普通站点用「按备份数保留」保留 7–14 份;内容更新频繁、文件大的站点用「按空间上限」。有远程同步时也不要关闭本地保留策略:本地旧文件被清理时,远程端同名旧文件也会按当前远程配置处理。

加密备份

开启「启用加密备份」并填写加密密码后,备份文件为 .tar.gz.enc。密码要妥善保存(忘记就无法使用),不要和后台登录密码相同;改密码只影响之后新生成的备份,旧备份仍要用当时的密码。需要把备份同步到第三方存储时强烈建议启用。

备份内容

内容 能否取消 说明
数据库 不可取消 核心业务数据
上传资源 可选 图片、封面、附件;资源多时备份文件会很大
系统配置 可选 运行相关配置,迁移、恢复、排障时有用

日常完整备份三项都选。

立即备份

点击「立即备份」会弹窗确认,可临时调整本次的保存目录、是否包含上传资源/系统配置;这些修改只对本次生效,不改写配置。启用了加密但没填密码时会被拦截;已有备份或同步在执行时需等待完成。

远程同步

远程备份
远程备份

同步策略

配置项 说明
启用远程备份 开启后远程配置才生效
同步方式 本地备份完成后同步(自动)或手动同步(点「立即同步」)
连接超时 / 失败重试次数 / 带宽上限 网络慢时调大超时;带宽上限避免占满出口影响站点访问

「立即同步」只同步本地备份目录中最新的一个备份文件,不会重新生成备份;没有本地备份文件时先去做一次本地备份;它使用已保存的配置,页面上刚改未保存的内容不参与。

远程类型与填写项

类型 填写项
S3 Endpoint、Region、Bucket、Access Key ID、Secret Access Key、对象前缀(如 backup/facy,可空)、Path Style 访问(服务商要求时开启)
Cloudflare R2 R2 Endpoint(账户级地址,不含桶名)、Region(通常 auto)、Bucket、Access Key ID、Secret Access Key、对象前缀、Path Style(通常开启);令牌权限给读写对象,并限制到指定桶
FTP 主机、端口(常见 21)、账号、密码、远程目录
SFTP 主机、端口(常见 22)、用户名、认证方式(密码/私钥)、密码或私钥+私钥口令、远程目录
SSH 与 SFTP 相同的字段;服务商明确提供 SFTP 时优先用 SFTP
WebDAV WebDAV 地址、账号、密码(或应用密码)、远程目录;不同服务商地址格式不同,按其说明填写

保存前先点「测试连接」,它会检查地址、账号、目录/桶是否可用,以及是否有写入和删除测试文件的权限(不会保存配置)。测试通过只代表当时可用,正式启用后仍要定期看备份日志。

备份日志

备份日志
备份日志

可按备份类型(全部/本地备份/远程同步)、执行状态(全部/成功/执行中/失败)、开始时间筛选。字段包括任务编号(向技术支持反馈问题时提供)、类型、状态、文件大小、耗时、开始/完成时间,「查看详情」可看目标位置、文件名和失败原因。「执行中」请稍后刷新。

数据恢复

恢复是高风险操作,请由熟悉服务器的人在命令行执行。

备份包里有什么

本地备份文件名形如 local-YYYYMMDDHHMMSS-随机串.tar.gz(加密后多一个 .enc 后缀)。解压后的目录结构:

路径 内容
database/database.dump pg_dump -F c(自定义格式)导出的数据库
uploads/ 上传资源目录(config.yaml 中 static.dir 指向的目录,默认 ./static,即 /usr/local/facy/static)内容
config/ 系统配置:config/config/(原 data/config 目录)、config/system/config.yaml、config/core/security.conf

恢复前检查

确认备份来源、时间点、文件大小(明显异常不要直接恢复)、是否加密(准备密码)、包含哪些内容。恢复前先额外保存一份当前状态,方便回退;并进入维护模式或停止服务,避免恢复过程中产生新数据。

建议顺序

  1. 通知相关人员,确认恢复窗口;
  2. 停止服务:systemctl stop facy.service(或开启维护模式);
  3. 把备份文件复制到临时目录(远程备份先下载回来);
  4. 如果是加密备份,先解密(见下);
  5. 解压:tar -xzf local-xxxx.tar.gz -C /tmp/restore;
  6. 先恢复数据库:用 pg_restore 把 database/database.dump 导入目标库(库名、账号见 facyManager db show),例如 pg_restore -h localhost -p 5432 -U 用户名 -d 库名 --clean --if-exists /tmp/restore/database/database.dump;
  7. 再按需把 uploads/ 内容放回静态资源目录;
  8. 最后按需恢复 config/ 里的系统配置;
  9. systemctl start facy.service(或退出维护模式);
  10. 登录后台和前台检查,成功后立即重新做一次本地备份和远程同步。

解密加密备份

加密文件格式为:前 9 字节固定头 FCCMSBAK1,接着 16 字节 IV,其后是 AES-256-CTR 密文,密钥为密码的 SHA-256。可以在 Linux 上用 openssl 还原(secret 换成你的加密密码,文件名换成实际文件):

sh
f=local-xxxx.tar.gz.enc
K=$(printf %s 'secret' | sha256sum | cut -d' ' -f1)
IV=$(tail -c +10 "$f" | head -c 16 | od -An -tx1 | tr -d ' \n')
tail -c +26 "$f" | openssl enc -d -aes-256-ctr -K "$K" -iv "$IV" > restored.tar.gz
tar -tzf restored.tar.gz | head   # 能列出 database/ uploads/ config/ 说明密码正确

恢复不可轻率

pg_restore --clean 会覆盖目标库中的同名对象。务必先备份当前数据库,并先在测试环境演练一次完整恢复流程;"有备份"不等于"能恢复",定期演练才可靠。

发财CMS 使用教程