Skip to content

备份与恢复 ​

这一篇是干什么的:给系统做"存档",以及用存档把系统恢复到某个时间点。

备份完成后 backups 目录里的文件清单

最重要的一句话,请读三遍

备份包里没有钥匙。

系统备份的是数据(客户、聊天、文件),不备份存放密钥的 deploy/runtime.env 文件。

所以恢复的时候,你手上必须有原来那份密钥文件。否则数据在、系统也起不来。

→ 密钥要单独存进公司的密码保险库,见密钥与安全边界。

做备份 ​

bash
./scripts/backup.sh

跑完,在 backups/ 下生成一个按时间命名的文件夹,比如 backups/20260927-120000/。

里面装着:

文件装什么
mysql.sql.enc全部业务数据:客户、标签、群发记录等
uploads.tar.gz.enc上传的素材和附件
redis-data.tar.gz.enc缓存和运行状态
manifest.txt这份备份的版本、时间、是否加密
SHA256SUMS每个文件的指纹,恢复前会自动校验

文件名带 .enc 表示是加密的。就算备份文件被人拿走,没有密钥也打不开。

备份加密密钥 ​

  • 默认必须加密,密钥文件默认在 deploy/secrets/backup.key,权限 600。
  • 这个密钥文件同样不在备份包里,要单独存保险库。
  • 丢了它 = 备份全部打不开。请和 runtime.env 一起放进保险库。

恢复 ​

bash
./scripts/restore.sh backups/20260927-120000 --confirm

把路径换成你要恢复的那份备份。末尾的 --confirm 是"我确认要恢复"的意思,防止手滑。

脚本会按顺序做:

  1. 检查备份文件齐不齐、指纹对不对
  2. 暂停前台、后端和缓存
  3. 用备份覆盖数据库和数据卷
  4. 重新启动,等自检通过

恢复完成:服务重新启动并通过自检

恢复前先做三件事

  1. 先给"现在"做一次备份(./scripts/backup.sh),万一要反悔
  2. 先在测试环境把这份备份恢复一次,确认它是好的
  3. 想清楚:恢复 = 数据回到备份那一刻,之后新产生的数据会丢

异机恢复:换台服务器把系统立起来 ​

服务器坏了、要搬家时用:

  1. 在新服务器上装好同版本的系统(在线或离线安装)
  2. 把该企业的 runtime.env 和备份加密密钥放到位(从保险库取出来)
  3. 启动一个空实例,确认能登录
  4. 把备份文件夹拷过来,执行恢复命令
  5. 检查:能登录、客户数量对得上、附件能打开、企微连接正常

多久备份一次 ​

时机方式
每次升级前升级脚本自动做
日常建议每天一次,用定时任务(crontab)跑 backup.sh
每月至少做一次异机恢复演练:拿一份备份在测试机器上真恢复一遍

备份有没有用,恢复过才知道。

出错了怎么办 ​

提示什么意思怎么办
backup encryption key file is missing找不到备份密钥从保险库取回 deploy/secrets/backup.key
... must have permission 600密钥文件权限太松执行 chmod 600 deploy/secrets/backup.key
unencrypted backup is rejected拿明文备份去恢复加密系统换成正确的加密备份
failed to decrypt backup artifact密钥不对确认用的是备份时那把钥匙
备份目录文件缺失备份被移动或删除换一份备份,或从异地副本取回

常见问题 ​

Q:备份文件放哪最安全?

别只放服务器本机。拷一份到别的地方(对象存储、另一台机器、离线硬盘)。服务器坏了,本机备份也跟着没了。

Q:备份会不会把钥匙也备进去?

不会,这是故意的——钥匙和备份分开放,丢一个不至于全丢。但也意味着两个都要保管好。

Q:恢复要多久?

看数据量,一般几分钟到几十分钟。恢复期间系统不可用,选业务低峰期做。

Q:能不能只恢复某几个客户?

当前版本不支持"挑数据恢复",恢复是整份覆盖。要找回个别数据,得找技术支持从备份里人工处理。

相关页面 ​

本说明书为企业 SCRM 私有化部署产品的配套文档