前几天看到有人帖子说服务器被服务商误删,五年博客数据全没。惊出一身冷汗——我的博客虽然没什么大不了的内容,但七八年的记录说没就没也挺难受。趁着周末把备份体系彻底整了一遍。
备份的对象
- WordPress 数据库(文章内容,最重要)
- wp-content/uploads(图片附件,体积最大)
- Nginx 配置、主题自定义代码、SSL 证书位置记录
- 域名解析记录的截图/导出(出问题时能快速照着重建)
方案:三份副本,两种介质,一份异地
第一份:服务器本地每日备份。脚本凌晨三点跑,mysqldump + tar 打包,保留最近 7 天。注意脚本里 mysqldump 要加 --single-transaction,不锁表:
#!/bin/bash
DATE=$(date +%F)
mysqldump -ublog -p'xxx' --single-transaction blog | gzip > /backup/db_$DATE.sql.gz
tar -czf /backup/uploads_$DATE.tar.gz /www/blog/wp-content/uploads
find /backup -mtime +7 -delete
第二份:同步到家里的 NAS。服务器到家里的网络没有公网入口,用了最朴素的方案:frp 打通后 rsync 拉取。每天一次增量同步,备份体积小的时候几乎没流量。
第三份:对象存储。每周日把当周备份推一份到腾讯云 COS(开了版本控制,防止误删备份本身)。这才是真正的异地容灾——服务器炸了、家里进水了,数据还在。
最重要的一步:验证恢复
没验证过的备份等于没备份。我在本地 Docker 起了个 WordPress,用备份文件完整恢复了一遍:导库、解压 uploads、改配置,40 分钟后一个一模一样的博客在本地跑了起来。这一步强烈建议每个自建博客的人都做一次,你会当场发现备份脚本里的各种坑(我的是 tar 打包时用了绝对路径,恢复时路径全对不上)。
最后把"如何从备份恢复"写成了一页文档,放在和备份无关的地方(NAS 的备忘 + 自己邮箱各存一份)。备份这事的终极目标是:哪怕我现在失忆了,对着文档也能把站救回来。

Comments 4 条评论
验证恢复这步才是关键,很多人跳过
tar 用绝对路径恢复全对不上,我也踩过
COS 开版本控制防误删备份,聪明
恢复文档放在和备份无关的地方,妙