服务器异地备份如何实现

域名注册
域名注册 正式会员超兽战士 👑年卡会员
发布于 2026-10-08 06:09 ·1 浏览 ·0 回复

学完这篇,你能从零搭起一套「本地打包 + 异地增量同步 + 定时执行 + 定期校验」的服务器异地备份链路,并知道哪些参数会让备份悄悄失败。

第一步:明确备份对象和异地落脚点

这一步决定备份什么、放到哪里,做完你手里会有一张备份清单(源路径、目标地址、保留天数)。

异地的最低标准是不同机房或不同城市,同一栋楼里换台机器不算异地。按数据量选目标:

  • 几百 GB 以内、想省事:用对象存储。阿里云 OSS 控制台点「Bucket 列表」→「创建 Bucket」,地域选一个与生产机房不同的城市(比如生产在杭州就选北京),读写权限选「私有」,版本控制开启。
  • 几个 TB、要保留完整目录结构:用一台异地服务器,装 Ubuntu 22.04,加一块独立数据盘挂到 /backup。

注意:异地备份账号必须和业务账号隔离。给备份专用账号只授「可写、不可删」权限,否则中了勒索病毒连异地副本一起被加密。

第二步:打通本地到异地的免密通道

这一步让本地服务器能免密码写入异地,做完你应该能直接 ssh 或 rclone 推送文件。

本地生成密钥(Ubuntu 22.04 自带 OpenSSH 9.0):

ssh-keygen -t ed25519 -f /root/.ssh/backup_key -N ""
ssh-copy-id -i /root/.ssh/backup_key.pub -p 2222 backup@10.20.30.40
ssh -p 2222 -i /root/.ssh/backup_key backup@10.20.30.40 "echo ok"

最后一条命令输出 ok 就通了。走对象存储则装 rclone v1.65,执行 rclone config,选 n(新建),类型选 s3,供应商选 Alibaba,填入 AccessKey 和 Secret,最后 rclone lsd oss: 能列出桶名即成功。

注意:ssh-copy-id 默认 22 端口,异地机改过端口必须显式带 -p,否则会连到别的服务上去。

第三步:在本地做一致性快照

这一步把「正在变化的数据」变成一份静止副本,做完你会得到一个带日期的备份目录。

MySQL 8.0 用:

mysqldump --single-transaction --master-data=2 -uroot -p'密码' 库名 | gzip > /data/backup/db_$(date +%F).sql.gz

--single-transaction 保证 InnoDB 表导出期间不锁表,数据是一致的。普通文件直接打包:

tar -czf /data/backup/site_$(date +%F).tar.gz /var/www/html

注意:不要直接对正在写入的目录做 tar,会得到半截文件。文件量大的话用 LVM 快照或先停写再打包。

第四步:把快照增量同步到异地

这一步只传变化的块,做完异地就有了当天副本。

rsync -avz --delete --bwlimit=5000 \
  -e "ssh -p 2222 -i /root/.ssh/backup_key" \
  /data/backup/ backup@10.20.30.40:/backup/web01/

参数含义:-a 保留权限时间、-z 压缩传输、--delete 删除异地已不存在的旧文件、--bwlimit=5000 限速 5MB/s 防止占满带宽。

对象存储方案用:

rclone sync /data/backup oss:my-backup-bucket/web01 --transfers 4 --checkers 8

注意:--delete 和 rclone sync 都会让异地与本地完全一致,源目录被误清空时异地也会被清空。稳妥做法是异地保留多份日期目录,用 rclone copy 而不是 sync。

第五步:用 cron 定时并设保留策略

这一步让备份自动跑,并自动清理过期文件,做完就不用每天手动执行。

crontab -e

0 3 * * * /opt/backup/backup.sh >> /var/log/backup.log 2>&1
# 每周日删除 30 天前的本地备份
0 4 * * 0 find /data/backup -name "*.gz" -mtime +30 -delete

注意:cron 的环境变量极简,脚本里所有命令写绝对路径(/usr/bin/rsync),否则手工能跑、定时报 command not found。

第六步:校验与恢复演练

这一步验证备份真的能用,做完你才敢说备份是可靠的。

sha256sum /data/backup/site_2024-06-01.tar.gz
ssh -p 2222 backup@10.20.30.40 "sha256sum /backup/web01/site_2024-06-01.tar.gz"

两边哈希一致即传输无损。每季度做一次恢复演练:

rsync -avz -e "ssh -p 2222" backup@10.20.30.40:/backup/web01/ /data/restore/
tar -xzf /data/restore/site_2024-06-01.tar.gz -C /tmp/test

能解压、能启动服务,才算备份合格。

注意:日志里出现 rsync error: unexplained error (code 255) 多半是密钥或端口问题,别只看「脚本没报错」就当成功,要检查退出码。

小结

  • 异地=不同机房或城市,备份账号只给写权限,防勒索。
  • 顺序是:一致性快照 → rsync/rclone 增量同步 → cron 定时 → 保留策略。
  • 关键参数记牢:--single-transaction 保一致、--bwlimit 限速、--delete 有风险。
  • cron 里命令用绝对路径,日志和退出码必须看一眼。
  • 备份不验证等于没备份,每季度做一次恢复演练。
版权声明:本文来自 GJ站长论坛《服务器异地备份如何实现》
原文链接:https://www.gj0.com/thread-780.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~