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

恢复演练(必须做)

备份不验证等于没备份。每月至少做一次恢复测试:

  1. 开一台最便宜的临时 VPS($2/月按小时计费的)
  2. 从备份恢复数据库和配置
  3. 确认网站能正常访问
  4. 销毁临时 VPS

这个流程验证了两件事:备份文件是完整的、你确实会恢复。