一、3-2-1 备份原则
备份领域最经典的准则是 3-2-1 原则:至少保留三份数据副本,使用两种不同的存储介质,其中一份存放在异地。三份副本意味着除了原始数据外还有两个备份;两种介质比如一块本地硬盘加一个云存储;异地则指备份存放在与服务器不同的物理位置,防止机房事故、自然灾害等把主数据和备份一锅端。
个人站长的预算有限,3-2-1 可以灵活落地:服务器本地保留一份每日备份,再用 rclone 同步一份到对象存储或另一台服务器,这就是最简版的 3-2-1。原则的核心思想是不要把鸡蛋放在一个篮子里。如果站点数据量不大,还可以把备份压缩包定期下载到自己的电脑,作为第三份离线副本。
二、备份什么:不止是数据库
很多人备份只想到数据库,实际上网站数据包括多个部分:网站文件(程序、主题、插件)、上传目录(图片附件)、数据库(文章、评论、配置)、系统配置(Nginx 配置、PHP 配置、crontab)、以及环境相关文件(SSL 证书)。任何一部分丢失都会带来麻烦,尤其是 SSL 证书,丢了重新签发还要等审核。
建议在服务器上建立一个备份清单,逐项列出需要备份的路径和数据库,比如站点目录、Nginx 配置目录、SSL 证书目录。MySQL 数据库可以用 mysqldump 导出,SQLite 数据库直接复制文件即可。定期检查清单,新增的目录要及时补进去。网站程序本身可以从官方重新下载,但上传目录和数据库是独一份,是备份的重中之重。
三、备份频率与保留策略
备份频率取决于数据变化速度。博客类站点可以每日备份数据库、每周备份全量文件;评论活跃的站点建议数据库每小时或每两小时增量备份。MySQL 可以用 binlog 做增量,文件用 rsync 做增量同步。全量备份加增量备份的组合,既能保证数据新鲜,又不会让每日备份占用太多磁盘和带宽。
保留策略解决备份放多久的问题,常见的是轮转方案:保留最近 7 天的每日备份、最近 4 周的每周备份、最近 6 个月的每月备份。用 find 命令配合 crontab 可以自动清理过期备份,比如 find /backup -name "*.sql.gz" -mtime +30 -delete。备份不是越多越好,无限制堆积会占满磁盘,反过来影响站点运行。清理前可以先用脚本确认备份文件确实存在且非空,避免误删。
四、备份工具与自动化
个人站长常用的备份工具组合:mysqldump 导出数据库并 gzip 压缩;tar 打包网站文件;rsync 增量同步;rclone 对接各种云存储;restic 和 borg 是更现代的方案,支持去重、加密和快照,恢复时可以直接挂载浏览。mysqldump 导出时建议加上 --single-transaction --quick --routines --triggers 参数,InnoDB 表可以在不锁表的情况下导出,存储过程和触发器也不会漏掉。
自动化用 crontab 即可。一个典型的每日备份脚本大致如下:先定义好备份目录和文件名,用 mysqldump 导出数据库并 gzip 压缩,用 tar 打包网站文件目录,然后用 rclone 上传到对象存储,最后清理七天前的旧备份。脚本开头加 set -e 让任何一步失败就停止,避免后续步骤基于不完整的备份继续执行。脚本末尾把执行结果写入日志,并用邮件或通知机器人发送状态,失败时第一时间知道。
写脚本时注意几个细节:文件名带上日期,比如 backup-20260823.tar.gz,方便按时间查找;数据库密码不要明文写在脚本里,可以放到权限为 600 的配置文件中;上传前先校验本地备份文件大小和 checksum,确认生成成功再上传,避免把半个文件传上去。另外要区分备份和快照的概念:云厂商的快照依赖同一套底层存储,只适合做短期回滚,不能替代独立备份;真正可靠的备份必须能脱离原服务器独立存在。
五、异地与加密
异地备份的落地方式有很多:对象存储按量计费,个人站每月几块钱;也可以备份到家里的 NAS 或另一台 VPS。rclone 是同步到对象存储的利器,配置一次即可长期使用,支持几十种存储后端。跨机同步也可以用 rsync over SSH,在另一台服务器上拉取备份,实现双机互备。异地备份的网络带宽要留意,全量包太大时考虑先压缩再传输。
敏感数据建议加密后再上传。可以用 openssl 对备份文件加密,或者直接使用 restic、borg 这类自带加密的备份工具。加密后务必妥善保管密钥,密钥丢失等于备份作废,这个坑很多人踩过。建议把密钥抄写在本地笔记或密码管理器里,和服务器分开存放。加密也会带来一个小问题:无法直接查看备份内容,所以恢复流程一定要先演练过。
六、恢复演练:备份的最终检验
没有经过恢复验证的备份等于没有备份。很多站长备份脚本跑了几年,真出事恢复时才发现备份文件损坏或命令不完整。建议每季度做一次恢复演练:在临时目录或新服务器上恢复最近一次备份,检查数据库能正常导入、网站能正常访问、图片附件完整。恢复演练也是熟悉恢复流程的机会,真出事时不至于手忙脚乱。
恢复演练要写一份操作文档,记录完整的恢复步骤:新装环境、恢复数据库、解压文件、修改配置、重启服务。文档放在服务器之外的地方,比如云笔记或本地电脑,服务器整体丢失时还能找到。演练中发现的问题要立刻修正备份脚本,比如发现 mysqldump 漏了某个库,就要马上补上。恢复后的站点要实际点开几个页面,发一条测试评论,确认功能正常才算通过。
七、常见误区
第一个误区是备份与数据在同一块磁盘,磁盘损坏时备份一起消失;第二个误区是只备份不验证,备份文件可能早已损坏;第三个误区是忽略配置文件,重装后程序在配置全丢;第四个误区是备份脚本没有监控,失败了一个月都不知道;第五个误区是备份权限设置不当,备份文件包含数据库密码等敏感信息却被任意用户可读。还有一类常见问题是备份脚本里的路径写死,迁移服务器或更换目录后脚本悄悄失效,建议定期人工检查一次备份日志和产物,确认脚本仍然在正常工作。避开这些坑,备份策略才算真正可靠。
总结
备份是网站运营中最便宜也最容易被忽视的保险。花一个下午把备份策略搭起来,把恢复演练跑通,以后无论遇到什么事故都能从容应对。记住:备份的价值在恢复,不在备份本身。从最简单的每日数据库导出开始,逐步完善成包含异地副本和恢复演练的完整体系,你的数据安全就有了兜底。