3-2-1 备份原则:3 份数据副本,2 种不同存储介质,至少 1 份异地备份。
VPS 上需要备份什么?
- 数据库(MySQL/PostgreSQL):数据无价,最重要
- 配置文件(Nginx/Docker Compose/.env):丢了要重写
- 用户上传文件(WordPress 的 wp-content/uploads 等)
- SSL 证书(如果用 Let's Encrypt 自动续期的,不用手动备份)
系统文件不需要备份——重装比恢复快。
方案一:Rclone + 云存储(推荐)
Rclone 支持 40+ 种云存储,把文件自动同步到 Google Drive / OneDrive / Backblaze B2。
# 安装
curl https://rclone.org/install.sh | bash
# 配置(交互式)
rclone config
# 备份脚本 backup.sh
#!/bin/bash
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# 导出数据库
mysqldump -u root --all-databases > $BACKUP_DIR/all_db.sql
# 打包配置文件
tar -czf $BACKUP_DIR/configs.tar.gz /etc/nginx /etc/fail2ban /root/docker-compose
# 上传到云端
rclone copy $BACKUP_DIR remote:vps-backup/$(date +%Y%m%d)/
# 删除 30 天前的本地备份
find /backup -mtime +30 -delete
方案二:自动快照(最省心)
大部分 VPS 控制面板(SolusVM / Virtualizor)支持自动快照:
- 每日快照,保留最近 7 天
- 每周快照,保留 4 周
- 注意:快照存在同一数据中心,不算"异地"
方案三:Duplicati(GUI 备份)
适合不习惯命令行的用户。Web UI 操作,支持加密、增量备份、定时任务。
定时执行
# 每天凌晨 3 点自动备份
crontab -e
# 添加:
0 3 * * * /root/backup.sh >> /var/log/backup.log 2>&1
恢复演练(必须做)
备份不验证等于没备份。每月至少做一次恢复测试:
- 开一台最便宜的临时 VPS($2/月按小时计费的)
- 从备份恢复数据库和配置
- 确认网站能正常访问
- 销毁临时 VPS
这个流程验证了两件事:备份文件是完整的、你确实会恢复。