做日本轻量云服务器运维,最怕的不是服务器卡、不是线路波动,而是数据丢了找不回来。被黑、误删、硬盘故障——这些事碰上一次,网站几年的积累可能就没了。很多站长也做备份,但方法是“想起来就手动拷一份”,或者在本机留个压缩包。这等于把鸡蛋放在同一个篮子里——服务器被入侵,备份文件跟着一起完蛋。
用rsync把日本轻量云服务器上的数据,每天自动同步到远程存储,增量传输、异地容灾。照着流程走一遍,以后数据备份就不用操心了。
先搞清楚:rsync能做到什么程度
rsync是Linux系统自带的文件同步工具,核心优势是增量传输——它只传输源端和目标端之间发生变化的部分,而不是把整个文件重新拷一遍。对于日本到国内的跨洋传输场景,这个特性能把带宽消耗和同步时间都降下来好几个数量级。
关于“异地”这个概念要稍微解释一下:如果你的日本轻量云本身就在东京机房,备份目标可以是同城的另一台VPS(物理上不在同一台宿主机就算容灾),也可以是香港的VPS,还可以对象存储。原则上备份位置和源服务器不在同一台物理机上,就算异地容灾——这样源服务器被入侵或硬件故障时,备份数据不会跟着遭殃。
第一步:准备备份目标
备份目标可以是另一台VPS,也可以是对象存储。以下以另一台VPS(远程服务器)为例说明,因为这种方式最通用、成本也最可控。
在远程备份服务器上:
1. 创建一个专门用于备份的用户账号(可选,但推荐),或者直接用现有账号
2. 创建备份存放目录,比如/backup/jp-server/
3. 确保磁盘空间足够——建议至少为源数据量的1.5倍,以便保留多份历史版本
# 在备份服务器上执行
mkdir -p /backup/jp-server
chmod 755 /backup/jp-server
配置SSH密钥认证:rsync通过SSH传输数据时,需要免密登录才能配合定时任务自动执行。在源服务器上生成密钥对,把公钥加到备份服务器的~/.ssh/authorized_keys里:
# 在源服务器上执行
ssh-keygen -t ed25519 -f ~/.ssh/id_rsa_backup -N ""
ssh-copy-id -i ~/.ssh/id_rsa_backup.pub root@备份服务器IP
测试一下连通性:
ssh -i ~/.ssh/id_rsa_backup root@备份服务器IP "echo '连接成功'"
如果不用输入密码就直接返回了,说明密钥配置没问题。
第二步:编写rsync备份脚本
在源服务器上创建一个脚本文件,用来执行实际的备份操作。
# 在源服务器上执行
mkdir -p /opt/backup
vi /opt/backup/backup.sh
脚本内容如下:
#!/bin/bash
# ========== 配置区 ==========
# 需要备份的源目录(多个目录用空格分隔,但rsync建议逐条执行)
SOURCE_DIRS=("/var/www" "/etc" "/home" "/opt/data")
# 远程备份服务器信息
BACKUP_USER="root"
BACKUP_HOST="你的备份服务器IP"
BACKUP_BASE="/backup/jp-server"
# 日志目录
LOG_DIR="/var/log/backup"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="$LOG_DIR/backup_$DATE.log"
# 保留天数(超过这个天数的历史备份会被清理)
RETENTION_DAYS=7
# ========== 执行区 ==========
mkdir -p $LOG_DIR
echo "=== 备份开始: $(date) ===" > $LOG_FILE
# 备份每个源目录
for dir in "${SOURCE_DIRS[@]}"; do
if [ -d "$dir" ]; then
echo "正在备份 $dir ..." >> $LOG_FILE
# 在远程创建对应的备份目录
ssh -i ~/.ssh/id_rsa_backup $BACKUP_USER@$BACKUP_HOST "mkdir -p $BACKUP_BASE$dir"
# 执行rsync增量同步
# -a: 归档模式(保留权限、时间戳等)
# -v: 显示详细过程
# -z: 启用压缩(节省跨洋带宽)
# --delete: 删除远程端源端已不存在的文件
# --timeout: 超时保护
rsync -avz --delete --timeout=3600 \
-e "ssh -i ~/.ssh/id_rsa_backup" \
"$dir/" "$BACKUP_USER@$BACKUP_HOST:$BACKUP_BASE$dir/" \
>> $LOG_FILE 2>&1
if [ $? -eq 0 ]; then
echo "$dir 备份成功" >> $LOG_FILE
else
echo "⚠️ $dir 备份失败" >> $LOG_FILE
fi
else
echo "警告: 目录 $dir 不存在" >> $LOG_FILE
fi
done
# 清理远程端超过保留天数的旧备份
# 注意:这一步只清理带时间戳的归档版本,具体清理逻辑根据你的目录结构调整
# 如果备份目标按日期分目录,可以用类似方式清理
echo "清理超过 $RETENTION_DAYS 天的旧备份..." >> $LOG_FILE
echo "=== 备份结束: $(date) ===" >> $LOG_FILE
几个关键参数解释:
-a:归档模式,保留文件权限、属主、时间戳等元数据,恢复时不需要重新设置-z:启用压缩传输,对于文本类文件(代码、日志、配置文件)能省大量带宽,但对图片、视频这类已压缩格式效果不明显--delete:如果源目录删除了某个文件,远程端也会同步删除,保持两边镜像一致。如果不想删除远程端的历史文件,去掉这个参数- 源目录末尾的
/不能省,否则会在远程多嵌套一层目录结构
给脚本加上执行权限:
chmod +x /opt/backup/backup.sh
第三步:设置定时任务
脚本写好了,需要让它每天自动跑起来。crontab是Linux系统自带的定时任务调度器,不需要额外安装。
crontab -e
添加一行,每天凌晨2:00执行备份:
0 2 * * * /bin/bash /opt/backup/backup.sh
crontab的时间格式是分 时 日 月 周,0 2 * * *表示每天凌晨2点整执行。建议选择凌晨业务低峰期,避免备份过程影响正常访问。
如果想测试定时任务是否生效,可以临时改成一个几分钟后的时间,看看日志文件是否正常生成。
第四步:验证备份是否成功
脚本跑完一次后,检查两件事:
1. 查看日志文件
cat /var/log/backup/backup_*.log | tail -50
如果看到xxx 备份成功,说明rsync执行正常。
2. 登录备份服务器检查文件
ssh root@备份服务器IP
ls -la /backup/jp-server/var/www/
确认文件确实同步过去了,权限和目录结构跟源服务器一致。
备选方案:备份到对象存储(S3/OSS)
如果不想额外租一台VPS做备份目标,用对象存储也可以。主流服务都支持S3协议,配合rclone或s3cmd也能实现增量同步。
这里以rclone为例:
1. 在源服务器上安装rclone:curl https://rclone.org/install.sh | sudo bash
2. 配置对象存储的认证信息:rclone config
3. 在备份脚本中用rclone sync替换rsync命令
对象存储的优点是按量付费、不需要运维另一台服务器,缺点是跨洋上传速度取决于网络质量,且超出免费额度后会产生费用。
日常维护建议
1. 定期检查备份状态:在脚本里加上失败告警逻辑,比如备份失败时发邮件或企业微信通知。不然备份哪天停了都不知道。
if [ $? -ne 0 ]; then
echo "备份失败!" | mail -s "备份告警" admin@你的邮箱.com
fi
2. 定期做恢复演练:备份的目的是恢复,不是为了备份而备份。每季度选一天,从备份服务器完整恢复一次数据到测试环境,确认备份文件可用。很多人在数据真丢了之后才发现备份早就坏了。
3. 清理旧备份:脚本里的RETENTION_DAYS就是干这个的。保留最近7天的日备份就够了,太久的备份占用空间却没有实际意义。如果备份目录结构是按日期分的,清理逻辑写在脚本里自动执行。
这套方案的核心逻辑不复杂:rsync做增量同步,cron做定时触发,远程服务器做异地存放。花一个小时配置好,后续每天自动执行,数据安全就有了兜底。真正出问题的时候,你会庆幸自己当初没有嫌麻烦。
相关内容
