前言
今天突然想起来,我的网站在本地一直没备份。虽然服务器每天都有定时备份,但谁也不知道哪天会炸。每次手动下载备份又太麻烦,于是我就想起了 rsync。
干脆用它把远程备份自动同步到本地 NAS,这样就不用每天动手了。今天就把整个过程写出来,算是给各位站长分享一下。
当然啦,每个人的习惯和环境都不一样,你完全可以用其他方法来备份网站和数据库。我这里分享的只是我自己使用的一种方式,也比较适合我自己的 NAS 环境。大家可以参考我的,也可以根据自己的需求去调整,完全不必拘泥于我的方法。
第一步:前提条件
- 本地 NAS 已安装 rsync 和 ssh。
- 远程服务器也安装了 rsync 和 SSH 服务。
- 拥有远程服务器的 SSH 登录权限。
- 远程网站服务器上已经备份好网站文件和数据库
- 假设要备份的路径:
• 网站文件:/www/backup/site/example.com/
• 数据库备份:/www/backup/database/mysql/blog/ - 本地 NAS 存储路径:
• 网站:/volume1/backup/site/
• 数据库:/volume1/backup/database/
第二步:配置 SSH 无密码登录
2.1 在本地 NAS 生成 SSH Key
ssh-keygen -t ed25519 -f ~/.ssh/id_rsync解释:
- -t ed25519:使用 ed25519 算法,安全且短小
- -f ~/.ssh/id_rsync:指定密钥文件名
- 回车选择空密码即可
生成后会有: - 私钥:~/.ssh/id_rsync
- 公钥:~/.ssh/id_rsync.pub
2.2 将公钥拷贝到远程服务器
假设 SSH 用户为 root,端口为 21222:
ssh-copy-id -i ~/.ssh/id_rsync.pub -p 21222 root@remote.server.com测试无密码登录:
ssh -i ~/.ssh/id_rsync -p 21222 root@remote.server.com如果不需要输入密码,说明配置成功。
第三步:测试 rsync 命令
3.1 备份网站
rsync -avz --delete -e "ssh -i ~/.ssh/id_rsync -p 21222" \
root@remote.server.com:/www/backup/site/example.com/ \
/volume1/backup/site/解释:
- -avz:归档模式 + 详细输出 + 压缩
- –delete:删除本地不存在的远程文件
- -e “ssh -i …”:指定 SSH 私钥和端口
- 后面两个路径:远程源 → 本地目标
3.2 备份数据库
rsync -avz --delete -e "ssh -i ~/.ssh/id_rsync -p 21222" \
root@remote.server.com:/www/backup/database/mysql/blog/ \
/volume1/backup/database/第四步 :方式 A:写自动化脚本 + crontab
4.1 创建脚本
nano /home/user/backup_site.sh#!/bin/bash
set -e # 遇错立即退出
exec >> /home/user/rsync_backup.log 2>&1 # 所有日志写到文件
# 备份网站
/usr/bin/rsync -avz --delete \
-e "ssh -i /home/user/.ssh/id_rsync -p 21222" \
root@remote.server.com:/www/backup/site/example.com/ \
/volume1/backup/site/
# 备份数据库
/usr/bin/rsync -avz --delete \
-e "ssh -i /home/user/.ssh/id_rsync -p 21222" \
root@remote.server.com:/www/backup/database/mysql/blog/ \
/volume1/backup/database/
exit 0给脚本执行权限:
chmod +x /home/user/backup_site.sh4.2 添加 cron 定时任务
crontab -e添加:
0 3 * * * /home/user/backup_site.sh- 每天凌晨 3 点执行
- 日志写入 /home/user/rsync_backup.log
第五步:方式 B:直接在 crontab 写命令
打开 crontab:
crontab -e添加两行:
0 3 * * * /usr/bin/rsync -avz --delete -e "ssh -i /home/user/.ssh/id_rsync -p 21222" root@remote.server.com:/www/backup/site/example.com/ /volume1/backup/site/ >> /home/user/rsync_backup.log 2>&1
30 3 * * * /usr/bin/rsync -avz --delete -e "ssh -i /home/user/.ssh/id_rsync -p 21222" root@remote.server.com:/www/backup/database/mysql/blog/ /volume1/backup/database/ >> /home/user/rsync_backup.log 2>&1- 第一行:网站备份
- 第二行:数据库备份,错开半小时
- 日志记录到同一个文件
不写脚本也能实现自动化备份。
第六步:查看日志
cat /home/user/rsync_backup.log可以看到文件传输列表和大小,确认备份是否成功。
第七步:小技巧(可选)
数据库备份按日期命名,避免覆盖:
DATE=$(date +"%Y%m%d")
rsync -avz -e "ssh -i ~/.ssh/id_rsync -p 21222" \
root@remote.server.com:/www/backup/database/mysql/blog/db_blog_$DATE.sql.gz \
/volume1/backup/database/脚本可以随时手动运行测试:
/home/user/backup_site.shset -e 保证出错立即停止,方便排查问题。
总结
- 配置 SSH Key 免密码登录
- 使用 rsync 增量备份网站和数据库
- 可选择脚本方式或直接 cron 方式
- 日志记录清晰,方便查看
- 可选按日期命名,避免覆盖
转载声明:
转载此文章请注明出处。
若本文内容侵犯了您的权益,请通过本站下方邮箱与我联系,我会尽快处理,谢谢!

发表回复