做外贸独立站或者海外内容站这六年,我见过太多悲剧了:有被同行DDoS打死直接被机房清退的,有VPS小厂商跑路连夜关门的,更有去年机房一把火烧得连渣都不剩的。平时天天研究怎么测品、怎么搞Google SEO,结果服务器一宕机,几个月的排名和订单一夜归零。今天不聊虚的,老老实实分享一套我自己用了好几年的网站自动化备份与异地容灾方案,无论你是用WordPress还是自己手搓的代码,照着抄作业,关键时刻真能救命。
Array很多人以为装个宝塔面板,点一下“自动备份到本地”,或者后台挂个UpdraftPlus插件就算完事了。老实讲,这叫心理安慰。本地备份一旦遇到硬盘损坏或母鸡挂掉,连同备份一起暴毙;插件备份遇到超大上传目录,经常中途内存溢出直接挂掉。真正靠谱的容灾,必须做到三点:本地全量快照、自动加密传输、跨云服务商异地存储。
网站数据看着多,其实就两样东西:
wp-content/uploads(图片附件),其他代码核心文件改动很少。代码甚至可以走Git,附件大但基本只增不减。别一股脑把几十G的图片天天打包,不仅占用服务器CPU,还会把备份盘撑爆。
备份千万别放同机房,甚至别放同一家云厂商(比如Linode备份到Linode,账号被风控直接一锅端)。
外贸站我强烈推荐用对象存储:
在服务器端,我们统一用神器 Rclone 来对接。这东西是Linux下的网盘挂载/同步瑞士军刀,支持几十种存储协议,性能极好。
这套脚本运行在你的Linux生产服务器上,核心逻辑:利用mysqldump导库,压缩核心目录,调用rclone推送到异地对象存储,并自动删除7天前的老备份。
以Ubuntu/Debian为例,直接官方脚本搞定:
sudo -v ; curl https://rclone.org/install.sh | sudo bash rclone config
按照交互提示,添加你的Cloudflare R2或者S3配置,记下你配置的源名称(比如命名为my-r2)。
在/root/scripts/目录下新建一个site_backup.sh:
#!/bin/bash # ---------- 参数配置 ---------- DATETIME=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/data/backup" WEB_DIR="/var/www/mywebsite" DB_NAME="your_db_name" DB_USER="your_db_user" DB_PASS="your_db_password" REMOTE_DEST="my-r2:my-backup-bucket/site_backups" # 创建临时备份目录 mkdir -p ${BACKUP_DIR}/${DATETIME} # 1. 备份数据库(加--single-transaction防止锁表影响线上业务) mysqldump -u${DB_USER} -p${DB_PASS} --single-transaction --quick ${DB_NAME} | gzip > ${BACKUP_DIR}/${DATETIME}/db_${DATETIME}.sql.gz # 2. 打包网站核心文件(排除大缓存目录) tar -czf ${BACKUP_DIR}/${DATETIME}/web_${DATETIME}.tar.gz \ --exclude="${WEB_DIR}/wp-content/cache" \ -C ${WEB_DIR} . # 3. 用 rclone 推送到异地对象存储 rclone copy ${BACKUP_DIR}/${DATETIME} ${REMOTE_DEST}/${DATETIME} # 4. 清理本地3天前备份,同时清理异地存储7天前的数据 rm -rf ${BACKUP_DIR}/* rclone delete --min-age 7d ${REMOTE_DEST} rclone cleanup ${REMOTE_DEST}
赋予执行权限:
chmod +x /root/scripts/site_backup.sh
凌晨3点到4点是外贸站或者访客相对最少的时候,适合跑任务:
crontab -e
加上这行(每天凌晨03:30执行):
30 3 * * * /root/scripts/site_backup.sh > /dev/null 2>&1
很多运维吹自己的备份体系多健全,一问“有没有恢复过”,哑口无言。没有做过还原演练的备份,等于没有备份。
我建议每个季度做一次“盲操”恢复:
rclone拉取最近一天的备份包。做这一步你才会发现各种隐蔽问题:比如MySQL版本不兼容(MySQL 8.0导回5.7报错)、有些软链接断了、或者某些关键文件权限变成root导致网站报500。在测试机踩坑,远比主服务器挂掉时手忙脚乱强一万倍。
如果你的主服务器彻底烧了,走这套流程可以在半小时内复活:
| 步骤 | 操作要点 | 关键耗时 |
|---|---|---|
| 1. 备机启动 | 在任何平台(如Hetzner、DigitalOcean)开一台新机器,跑初始LNMP脚本 | 5-10分钟 |
| 2. 拉取数据 | 通过Rclone从R2直接拉取最新的.sql.gz和.tar.gz恢复 | 取决于带宽,一般3-5分钟 |
| 3. 域名解析切换 | 前提是你的DNS托管在Cloudflare。直接改A记录IP,甚至不用等TTL刷新,秒切 | 1分钟内 |
做外贸久了就会明白,SEO排名、订单转化都是建立在基础设施稳定上的。别把希望寄托在主机商的良心上,只要数据在自己手里,哪怕机房全炸了,换个IP重新绑定解析,你依然能安稳睡大觉。