
先说个真实经历。2025年10月,我一个客户的站被黑了,数据库被清空。宝塔面板的备份功能是开着的,每周自动备份到服务器本地。结果恢复的时候发现——最近三个备份文件全是损坏的,CRC校验不通过。最终损失了一个月的数据。
从那以后,我所有项目的备份全部改用rsync+定时任务。两年了,零故障。这篇文章讲清楚怎么配,以及为什么rsync比面板自带的备份靠谱。
为什么不用宝塔自带备份
宝塔的备份功能有三个硬伤:
第一,备份文件存在同一台服务器上,服务器硬盘坏了或者被黑,备份一起完。第二,它用的是zip/tar打包后直接存,没有增量备份——一个500MB的网站每天备份一次,一个月光备份就15G。第三,没有完整性校验。备份过程中如果被打断(比如服务器重启、磁盘满了),文件损坏了也不会报错,等你恢复的时候才发现。
这三点合在一起,意味着宝塔自带备份的可靠性基本靠祈祷。
rsync方案怎么配
rsync最大的好处是增量同步——只传输变化的部分。一个500MB的网站,每天改动的文件可能只有几MB,传输时间从几分钟降到几秒。而且支持远程备份,可以存到另一台服务器或者NAS上。
基本命令:
rsync -avz --delete /www/wwwroot/yoursite/ user@backup-server:/backup/yoursite/
解释一下参数:-a是归档模式(保留权限、时间戳等),-v是显示详细输出,-z是压缩传输,--delete是删除目标端来源端已删除的文件(保持两边完全一致)。
加上数据库备份:用mysqldump先导出SQL,再一起rsync过去。
完整的自动化脚本
把下面这个脚本放到服务器上,配一个crontab每天凌晨3点跑:
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/backup/$DATE
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump -u用户名 -p密码 数据库名 > $BACKUP_DIR/db.sql
# 备份网站文件
rsync -avz --delete /www/wwwroot/yoursite/ $BACKUP_DIR/site/
# 同步到远程备份服务器
rsync -avz --delete /backup/ user@192.168.1.100:/remote-backup/
crontab配置:0 3 * * * /root/backup.sh >> /var/log/backup.log 2>&1
这样每天凌晨3点自动执行,结果会记录到日志文件。出错了一眼能看到。
几个容易踩的坑
第一个:--delete参数要小心。如果你在目标服务器上手动放了一些文件(不是通过rsync同步过去的),加上--delete后会把这些文件删掉。如果不想删,去掉这个参数就行。
第二个:rsync over SSH如果带宽有限,加上--bwlimit限制速度,比如--bwlimit=1000就是限速1MB/s。不然会占满带宽,影响网站正常访问。
第三个:数据库备份必须在mysqldump完成之后再开始rsync,不然可能备份到不完整的SQL文件。脚本里注意先后顺序。
第四个:定期验证备份。我每个月抽一天,从备份服务器上拉一份最新的备份下来,在本地环境恢复一遍,确认网站能正常打开、数据库能正常读取。不验证的备份等于没有。
成本
我的做法是租一台最便宜的轻量云服务器(腾讯云轻量2核2G,一个月34块,100GB系统盘)专门做备份。34块钱一个月买数据安全,比宝塔的付费备份插件(一年299)便宜,而且更可靠。
一句话:不要把所有鸡蛋放在一个篮子里,尤其是装着数据的鸡蛋。
标签: 网站备份 rsync 服务器运维 实用技巧 数据安全
还木有评论哦,快来抢沙发吧~