VPS

使用rsync和cron自动备份VPS数据

使用rsync和cron自动备份VPS数据

目录

  1. rsync是什么及为什么使用它
  2. 在Ubuntu/Debian上安装rsync
  3. 本地备份
  4. 通过SSH备份到远程服务器
  5. 配置SSH密钥
  6. 编写完整的备份脚本
  7. 配置cron定时任务
  8. 备份轮转与保留策略
  9. 验证和测试备份
  10. 常见问题

VPS数据备份至关重要,但手动备份不可靠——忙碌时容易忘记或跳过。本文将演示如何使用 rsync 配合 cron 创建 每日全自动备份,无需任何人工干预。

1. rsync是什么及为什么使用它

rsync(远程同步)是Linux内置的命令行工具,支持本地和通过SSH的文件同步。用于备份的主要优势:

rsync对比tar+scp: tar+scp每次复制全部内容,10GB数据可能需要很长时间。rsync只传输自上次以来的变化——日常备份只需几秒到几分钟。

2. 在Ubuntu/Debian上安装rsync

# 检查rsync是否已安装
rsync --version

# 在Ubuntu/Debian上安装
sudo apt update && sudo apt install rsync -y

# 在CentOS/AlmaLinux上安装
sudo yum install rsync -y

3. 本地备份

基本语法

rsync [选项] 源目录/ 目标目录/

常用选项

选项说明
-a归档模式 — 保留权限、所有权、符号链接、时间戳
-v详细模式 — 显示传输的文件列表
-z传输时压缩数据
--delete删除目标中源没有的文件
--exclude排除匹配的文件或目录
--dry-run试运行,不实际传输文件
-P显示进度条
# 备份/var/www到/backup/www
rsync -avz /var/www/ /backup/www/

# 排除临时文件和缓存
rsync -avz --exclude='*.tmp' --exclude='cache/' /var/www/ /backup/www/
注意末尾斜杠:/var/www/(有斜杠)= 复制目录内容;/var/www(无斜杠)= 复制整个目录。结果截然不同。

4. 通过SSH备份到远程服务器

# 通过SSH rsync到远程服务器
rsync -avz -e ssh /var/www/ user@remote-server:/backup/www/

# 指定非标准SSH端口
rsync -avz -e "ssh -p 2222" /var/www/ user@remote-server:/backup/www/

# 使用指定的SSH密钥文件
rsync -avz -e "ssh -i /root/.ssh/backup_key" /var/www/ user@remote-server:/backup/www/

5. 配置SSH密钥

cron无法交互式输入密码,必须使用SSH密钥认证。

# 1. 生成SSH密钥对(不设置密码短语,供cron使用)
ssh-keygen -t ed25519 -f /root/.ssh/backup_key -N ""

# 2. 将公钥复制到远程服务器
ssh-copy-id -i /root/.ssh/backup_key.pub user@remote-server

# 3. 测试无密码连接
ssh -i /root/.ssh/backup_key user@remote-server "echo 'SSH key OK'"

6. 编写完整的备份脚本

#!/bin/bash
# /root/scripts/backup.sh

BACKUP_SOURCE="/var/www /etc /home"
BACKUP_DEST="backup-user@backup-server:/backups/$(hostname)"
SSH_KEY="/root/.ssh/backup_key"
LOG_FILE="/var/log/backup.log"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

log "=== 备份开始 ==="
ERRORS=0

for SRC in $BACKUP_SOURCE; do
    log "正在备份 $SRC..."
    rsync -az \
        --delete \
        --exclude='*.tmp' \
        --exclude='cache/' \
        -e "ssh -i $SSH_KEY -o StrictHostKeyChecking=no" \
        "$SRC/" \
        "$BACKUP_DEST${SRC}/"

    if [ $? -eq 0 ]; then
        log "成功: $SRC"
    else
        log "错误: $SRC 备份失败"
        ERRORS=$((ERRORS + 1))
    fi
done

log "=== 备份完成(错误: $ERRORS)==="
exit $ERRORS
chmod +x /root/scripts/backup.sh

7. 配置cron定时任务

# 编辑crontab
crontab -e

# 每天凌晨2点运行备份
0 2 * * * /root/scripts/backup.sh >> /var/log/backup.log 2>&1

cron语法说明

字段值含义
分钟0第0分钟
小时2凌晨2点
日期*每天
月份*每月
星期*每天

8. 备份轮转与保留策略

#!/bin/bash
DATE=$(date +%Y-%m-%d)
BACKUP_BASE="/backup"
BACKUP_DIR="$BACKUP_BASE/$DATE"

mkdir -p "$BACKUP_DIR"
rsync -az /var/www/ "$BACKUP_DIR/www/"
rsync -az /etc/ "$BACKUP_DIR/etc/"

# 删除30天前的备份
find "$BACKUP_BASE" -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;

9. 验证和测试备份

# 查看今日日志
tail -50 /var/log/backup.log

# 查找错误
grep "ERROR\|错误" /var/log/backup.log | tail -20

# 测试恢复
rsync -avz backup-user@backup-server:/backups/hostname/var/www/index.html /tmp/test/
diff /var/www/index.html /tmp/test/index.html
3-2-1备份原则:保留 3份副本,存放在 2种不同介质,其中 1份在异地。本地磁盘 + 远程VPS + 云存储的组合可提供最全面的保护。

常见问题(FAQ)

rsync是什么?为什么用它备份VPS?
rsync是Linux内置的增量同步工具,只传输变化的部分,相比每次全量复制大幅节省带宽和时间,是VPS每日自动备份的理想选择。
运行rsync备份需要什么VPS配置?
rsync消耗的CPU和内存极少,最小1核512MB RAM的VPS就能流畅运行,只需确保目标存储空间充足。
VPS备份应该存放在哪里?
遵循3-2-1原则:3份副本,2种介质,1份异地。推荐rsync到独立远程服务器或S3、Backblaze B2等云存储。
没有人登录时cron会执行备份吗?
会的。cron守护进程持续在后台运行,无需任何人登录。用systemctl status cron确认服务运行中即可。
如何知道备份是否成功?
将rsync输出重定向到日志文件,并配置邮件通知。使用mailutils或msmtp可以自动发送备份结果邮件。
在cron中rsync到远程服务器需要SSH密钥吗?
是的,cron无法交互式输入密码。需要创建无密码短语的SSH密钥对,将公钥复制到远程服务器,在rsync命令中引用私钥。
rsync与tar+scp有什么区别?
tar+scp每次全量复制,数据量大时耗时数小时。rsync只传输变化的内容,日常备份缩短到几秒或几分钟。

总结:立即开始自动化VPS备份

使用 rsync + cron 自动化VPS备份简单可靠、成本低廉。步骤总结:

  1. 安装rsync并配置SSH密钥
  2. 编写带日志和错误处理的备份脚本
  3. 设置每晚运行的cron定时任务
  4. 每周检查日志,定期测试恢复

寻找可靠的VPS主机?AsiaGB VPS 提供泰国和新加坡数据中心,SSD存储,99%正常运行时间,专业技术支持随时待命。