VPS上的数据丢失可能来自多种原因,有些可以预防,有些无法避免:硬件故障、勒索软件、人为错误(误删文件)或升级失败导致的系统损坏。
数据安全研究的一些警示数据:
AsiaGB VPS提供每月两次自动备份(每月1日和15日)作为服务商级别的安全网。但对于每天都在变化的数据,您还需要自己制定额外的备份策略。
3-2-1规则是全球通用的行业标准备份方法:
| 数字 | 含义 | 示例 |
|---|---|---|
| 3 | 数据保存3个副本 | 原始数据 + 本地备份 + 远程备份 |
| 2 | 使用2种不同的存储介质 | SSD(VPS)+ 对象存储(S3/R2) |
| 1 | 1个副本存放在异地 | Cloudflare R2、Backblaze B2或另一台VPS |
| 类型 | 工作方式 | 存储空间 | 恢复速度 | 适用场景 |
|---|---|---|---|---|
| 完整备份 | 每次复制所有文件 | 大 | 快 | 每周备份、初始基线 |
| 增量备份 | 仅复制上次备份后的变更 | 很小 | 慢(需要链式还原) | 每日备份 |
| 差异备份 | 复制上次完整备份后的所有变更 | 中等 | 中等 | 需要快速恢复时 |
| 工具 | 优势 | 适用场景 | 难度 |
|---|---|---|---|
| rsync | Linux内置,无需安装,支持SSH | 初学者,简单备份 | ⭐ 简单 |
| BorgBackup | 去重、加密、压缩 | 生产VPS,注重存储效率 | ⭐⭐ 中等 |
| Restic | 原生支持S3/B2/R2,快速,跨平台 | 云存储后端 | ⭐⭐ 中等 |
| Duplicati | 图形界面,加密,支持云端 | 偏好可视化界面的用户 | ⭐ 简单 |
| mysqldump / pg_dump | 数据库内置工具 | 专门的数据库备份 | ⭐ 简单 |
rsync是最佳起点——无需依赖,简单易懂。
# 在VPS上创建密钥对
ssh-keygen -t ed25519 -C "backup-key" -f ~/.ssh/backup_key -N ""
# 将公钥复制到备份服务器
ssh-copy-id -i ~/.ssh/backup_key.pub user@backup-server
#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_USER="backup"
BACKUP_HOST="backup-server.example.com"
BACKUP_PATH="/backups/myvps/$DATE"
LOG="/var/log/backup.log"
rsync -avz --delete \
-e "ssh -i /root/.ssh/backup_key" \
/var/www/ /etc/ /home/ \
$BACKUP_USER@$BACKUP_HOST:$BACKUP_PATH/ >> $LOG 2>&1
# crontab -e
# 每晚凌晨2点运行
0 2 * * * /usr/local/bin/vps-backup.sh
BorgBackup非常适合需要长期保留备份历史但不希望存储成本过高的VPS。其去重系统只存储相同数据一次,通常可节省40-60%的存储空间。
# 安装
apt install borgbackup -y
# 初始化仓库(仅一次)
borg init --encryption=repokey user@backup-server:/backups/borg-repo
# 创建备份
borg create --stats --progress \
user@backup-server:/backups/borg-repo::$(date +%Y-%m-%d) \
/var/www /etc /home
# 自动清理旧存档(保留7天日/4周/6月)
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=6 \
user@backup-server:/backups/borg-repo
| 数据类型 | 建议频率 | 最佳方法 |
|---|---|---|
| 数据库(MySQL/PostgreSQL) | 每4-6小时或每天 | mysqldump + cron |
| 文件上传/用户内容 | 每天 | rsync增量或Restic |
| 配置文件(/etc) | 每次修改前 + 每周 | git + rsync |
| 应用程序代码 | 每次部署 | Git仓库是主要备份 |
| 系统快照 | 每周 | 服务商VPS快照 |
mysqldump --single-transaction 获取一致的无锁快照。切勿在MySQL运行时直接复制.ibd文件。
拥有备份但从不测试恢复,就像购买保险却从未阅读条款——直到灾难发生才知道是否真的有效。
mysqldump --single-transaction 可获得一致的无锁快照。对于PostgreSQL,pg_dump 天然安全。两者都可在生产数据库运行时安全备份。