VPS用久了最怕一件事:某天数据库崩了,发现最近一次备份是三个月前手动做的。手忙脚乱恢复出来的数据和丢了没什么两样。本文把三种备份方案——rsync+定时任务(最省钱)、COS/OSS对象存储(最省心)、服务器快照(恢复最快)——分别讲清楚配置步骤和适用场景。
备份之前先想清三个问题
动手之前,先回答这三个问题能帮你选对方案:
- 要备份什么? 建站类至少备份网站文件(/var/www)和数据库。跑Docker的加上数据卷目录(/var/lib/docker/volumes)。配置文件(/etc/nginx、/etc/systemd)也得备份,重装系统后不用重新配一遍。
- 备份放哪? 可以存本地(同一台VPS的其他目录)、存另一台VPS、存云存储(腾讯云COS/阿里云OSS/七牛云)、存本地电脑。对VPS来说存本地等于没备份——服务器挂了备份也一起没了。
- 多久备一次? 网站日更选每天一次;静态博客每周一次;数据库每6小时一次也不过分。频率越高丢失的数据越少,但存储成本和带宽开销也越高。
方案一:rsync + crontab 定时同步到另一台VPS
rsync 是 Linux 上最可靠的文件同步工具,只传差异部分、支持断点续传、可以走 SSH 加密传输。配合 crontab 做定时任务,就是一套零成本的自动备份系统。
配置步骤:
# 1. 在备份目标VPS上创建备份目录
mkdir -p /backup/website
# 2. 在原VPS上配置SSH密钥免密登录(备份脚本不需要手动输密码)
ssh-keygen -t rsa
ssh-copy-id root@备份目标IP
# 3. 测试rsync是否正常
rsync -avz --delete /var/www/ root@备份目标IP:/backup/website/
# -a 归档模式(保留权限和软链接)
# -v 显示详情 -z 压缩传输 --delete 删除目标端多余的旧文件确认同步正常后加入 crontab 自动执行:
# 编辑定时任务
crontab -e
# 每天凌晨3点同步网站文件,凌晨3:30备份数据库
0 3 * * * rsync -az --delete /var/www/ root@备份IP:/backup/website/ >> /var/log/backup.log 2>&1
30 3 * * * mysqldump -u root -p'你的密码' --all-databases | gzip > /backup/db_$(date +%Y%m%d).sql.gz注意:crontab 里 % 需要转义写成 %。密码写进 crontab 不安全,建议用 .my.cnf 文件存数据库密码,然后 mysqldump 不加 -p 参数。
rsync 的优点是只传变化的部分(增量同步),网站文件改一个页面只传几KB,不重传整个目录。缺点是需要另一台VPS作为备份目标——雨云入门VPS月付几块钱起,用优惠码 admin01 首月五折,拿来当备份机成本很低。
方案二:对象存储自动归档
不想要第二台VPS的,用对象存储替代。腾讯云COS、阿里云OSS都有免费额度(通常10GB以内免费),小网站备份基本不花钱。
以腾讯云COS为例,用 coscli 或 coscmd 工具上传备份:
# 安装coscmd
pip install coscmd
# 配置(需要COS的SecretId和SecretKey)
coscmd config -a SecretId -s SecretKey -b 存储桶名称 -r 地域
# 上传备份
coscmd upload /backup/db_20260730.sql.gz /backup/db_20260730.sql.gz
# 配合定时任务
0 3 * * * mysqldump -u root --all-databases | gzip > /tmp/db_latest.sql.gz && coscmd upload /tmp/db_latest.sql.gz /backup/db_latest.sql.gz对象存储的好处:99.9999999% 的数据持久性(比你自己维护的VPS硬盘可靠几个数量级)、按量付费没备份时几乎不花钱、可以设置生命周期规则自动删除30天前的旧备份省钱。
缺点:恢复时要先从COS下载备份文件再到VPS,大文件恢复比rsync直接从另一台VPS拉要慢。另外注意 COS 的流量费——下载是走外网流量,按每GB几分钱收费。备份文件如果几百MB,恢复成本几毛钱可以忽略。
方案三:服务器快照——恢复最快
快照不是备份文件,而是把整个磁盘状态拍下来。恢复时整盘回滚,连操作系统到应用配置一键还原。
主流VPS平台(雨云、阿里云、腾讯云等)的控制台都有快照功能。操作就是点「创建快照」,系统会自动给你的系统盘和数据盘分别拍照。几分钟搞定。
快照的优势是恢复速度——整盘回滚,不用重装系统、重装软件、导入数据库,十分钟内恢复到快照时的完整状态。代价是快照占存储空间(和当前磁盘使用量同级),多个历史快照会累积费用。
建议策略:快照+备份文件并用。快照作为灾难恢复的兜底方案(每周一次自动快照),备份文件用于应对误删单个文件或表数据丢失的日常场景(每天一次rsync/对象存储)。
三种方案对比
| 方案 | 成本 | 恢复速度 | 适合谁 |
|---|---|---|---|
| rsync到另一台VPS | 另一台VPS月费 | 快(局域网速率) | 已有两台VPS的用户 |
| 对象存储归档 | 极低(10GB以内免费) | 中(需下载) | 单台VPS、预算敏感 |
| 服务器快照 | 中(按磁盘大小计费) | 最快(整盘回滚) | 对恢复速度有要求 |
一个防翻车的备忘
备份最大的坑不是没做备份,而是做了备份但从没验证过能不能恢复。数据库备份文件可能是损坏的、rsync 可能漏掉了关键目录、COS 的密钥可能过期了——这些问题在需要恢复的那一刻才发现,就晚了。
建议每隔一两个月做一次恢复演练:在另一台测试VPS上把最近的备份完整恢复一遍,确认网站能正常打开、数据库数据没有丢。花二十分钟跑一次恢复流程,比灾难发生后再抓狂有用得多。
常见问题
VPS被黑了,备份文件也会被删吗?
如果备份存同一台VPS,会被删。这就是为什么备份必须放异机——另一台服务器、对象存储、或者本地电脑。对象存储建议用不同的云账号(或者至少不同的密钥权限),防止黑客拿到VPS的密钥后顺便删了你的COS文件。
数据库一直在写入,备份会不会不一致?
mysqldump 默认会锁表保证一致性,但对正在运行的网站有影响。InnoDB 引擎可以用 –single-transaction 参数,在事务中导出数据,不锁表、不影响线上业务。如果数据一致性特别重要(比如金融系统),建议用主从复制 + 在从库上做备份。
备份文件保留多久合适?
建议保留最近7天的每日备份 + 最近4周的每周备份 + 最近3个月的每月备份。对象存储设置生命周期规则自动清理,rsync 方案写个脚本删除N天前的旧文件。不用无限保留——三个月前的备份恢复意义不大,只会占空间。






