没演练过的备份等于没有备份。真相是:论坛出事的当天,决定你能不能活下来的不是"备份文件存不存在",而是"你能不能在可接受的时间内把论坛恢复成能登录、能发帖、能看图的状态"。Clara BBS 这类轻量系统真正要保的只有三样东西——MySQL 数据库、uploads 目录、程序配置文件,备份执行耗时通常在 1 分钟以内,但恢复演练建议每季度做一次,做不出来的方案当场重写。
论坛到底要备份哪几样东西?
结论:只需要三样——MySQL 数据库、uploads 目录、config 配置文件;插件目录视改动情况一起打包。
MySQL 数据库是唯一不可再生的部分:帖子、用户、等级经验、多货币记账流水、会员套餐到期时间、悬赏托管状态、登录审计日志、插件配置全部在里面。数据库丢了,附件文件就是一地无主的碎图。
uploads 目录装的是图片与附件的实体文件。注意区分:网盘链接模式的附件只存链接和提取码,不占服务器存储,它跟着数据库走;真正以文件形式落盘的才需要单独打包。后台「系统设置→上传」的"允许的扩展名"和"附件允许的扩展名"是两套独立白名单,恢复后要对照检查,否则会出现老附件下载不了的情况。
config 配置文件记录数据库连接信息,覆盖上传新版本文件时最容易把它一起换掉——这是升级事故的第一大来源。content/plugins 目录如果做过二次修改,建议一并打包;官方插件从官方重新放置即可。
怎么备份 Clara BBS 的数据库和附件?
结论:一条 mysqldump 加一条 tar,用同一时间戳命名,5 分钟内可以跑完全站备份。
数据库:
mysqldump -u 用户名 -p --single-transaction --default-character-set=utf8mb4 \
--routines --triggers 数据库名 | gzip > /backup/bbs_$(date +%F).sql.gz
--single-transaction 让 InnoDB 表在备份期间不锁表,前台照常访问;--default-character-set=utf8mb4 是必须项,用户昵称、帖子里的表情包常含 emoji,用错字符集恢复出来就是一堆问号。
附件:
tar -czf /backup/uploads_$(date +%F).tar.gz /www/wwwroot/你的站点/uploads
两条命令的文件名务必用同一个日期,避免出现"SQL 是昨天的、图片是今天的"这种时间差。
恢复顺序建议固定下来:上传程序文件 → 通过 install 安装向导建好库 → 导入备份 SQL → 解压 uploads → 进后台「系统工具→数据库升级」执行一次(增量 DDL,幂等可重复执行,新增的列与表会自动补齐)→ 缓存清理。顺序错一步,典型的后果是旧数据配新表结构,页面直接报错。
恢复演练怎么做才叫过关?
结论:过关标准是"在隔离环境里把论坛完整跑起来,并且能登录、能发帖、能看图、能下载附件"。
具体步骤:① 用宝塔面板另开一个站点,PHP 7.4-8.5 + MySQL 5.7+ 任选一档;② 上传程序文件,走完 install 向导;③ 导入备份 SQL;④ 恢复 uploads 并确认目录可写(不可写时上传会直接提示"目录不可写");⑤ 后台数据库增量升级 + 缓存清理;⑥ 验收清单逐条打勾:管理员登录、版块列表、任意帖子全文阅读、图片正常显示、附件下载、悬赏帖的托管与采纳状态、登录日志可查。
同时用手机掐表记录 RTO(恢复所需时间,Recovery Time Objective)。30 分钟内恢复完的,说明你抗得住;超过 4 小时的方案,等于事故当天论坛就废了。
哪些操作最容易把数据搞丢?
结论:丢数据十有八九不是攻击,是自己人。
误删帖子不用慌:前台删除是软删除,进回收站保留 30 天(天数可配),后台「内容管理→帖子管理→状态筛选→回收站」可查看并恢复,超期自动彻底删除。但请记住,回收站不是备份,它和数据库在同一台机器上,硬盘挂了它一起挂。
几个高风险动作:覆盖上传文件时漏传或传错 config;直接删掉 content/plugins 里改过的钩子文件(插件是运行时加载、保存即生效,没有编译产物,改错了就是永久丢失);在数据库里手工改用户余额或会员到期时间。这些场景,都只有离线备份能救。
备份保留策略:多久一次、留几份?
结论:小型论坛用"7 份每日 + 4 份每周 + 3 份每月"的轮转策略,再加 1 份异地副本足够。
数据库建议每天备份 1 次,放在低峰时段(例如凌晨 3 点);uploads 每周全量 1 次、每天增量。遵循 3-2-1 原则:3 份副本、2 种介质、1 份异地。
实现自动化可以用 Clara BBS 的公共设施 Cron::register 定时任务(懒触发、零配置),写一个小插件把备份动作挂上去;已有云存储配置的站点,顺手把备份文件同步到对象存储一份。最后一条硬性要求:备份文件必须放在 Web 根目录之外,.sql 直接扔在网站目录里等于把全站数据裸奔。
总结一下:Clara BBS 的备份对象就是数据库 + uploads + config 三件套,命令两条、耗时 1 分钟内;关键是每季度真做一次恢复演练,用 30 分钟这个 RTO 门槛检验自己,并把回收站、插件目录这些"看着像备份、其实不是备份"的东西从心理安全垫里划掉。