数据备份是运维的生命线。硬盘会坏、人会误删、黑客会加密——只有备份能救你。今天介绍 Linux 下最经典的文件同步工具 Rsync,以及用它搭建自动备份方案。
一、Rsync 是什么
Rsync 是 Linux 下的远程文件同步工具,核心优势:
- 增量同步:只传变化的部分,不重复传整个文件
- 支持本地和远程:同一台机器或跨服务器都行
- 保留属性:权限、时间戳、软链接都能保留
- 压缩传输:省带宽
二、基本用法
# 本地同步(目录到目录)
rsync -av /source/ /backup/
# 远程同步(通过 SSH)
rsync -avz /local/data/ user@192.168.1.100:/remote/backup/
# 从远程拉到本地
rsync -avz user@192.168.1.100:/remote/data/ /local/backup/常用参数:
-a # 归档模式(保留权限、时间等)
-v # 显示详情
-z # 压缩传输
-P # 显示进度 + 支持断点续传
--delete # 删除目标端多余文件(保持完全一致)
--exclude # 排除文件
-n # 干跑模式(测试,不实际执行)三、实战场景
场景1:网站文件每日备份
#!/bin/bash
# /opt/scripts/backup-web.sh
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/web/$DATE"
mkdir -p $BACKUP_DIR
rsync -avz --delete \
--exclude='cache/' \
--exclude='*.log' \
/var/www/html/ \
$BACKUP_DIR/
# 保留最近 7 天
find /backup/web/ -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;场景2:MySQL 数据库备份 + 同步
#!/bin/bash
# 先导出 SQL
mysqldump -uroot -p'password' --all-databases > /tmp/db_backup.sql
# 同步到备份服务器
rsync -avz /tmp/db_backup.sql backup@192.168.1.200:/backup/db/
# 清理
rm /tmp/db_backup.sql场景3:两台 Web 服务器文件同步
# Server A 作为源,定时同步到 Server B
rsync -avz --delete \
-e "ssh -p 22" \
/var/www/html/ \
root@server-b:/var/www/html/四、配合 crontab 实现自动备份
# 每天凌晨 2 点备份
0 2 * * * /opt/scripts/backup-web.sh >> /var/log/backup.log 2>&1
# 每小时同步一次数据库
0 * * * * /opt/scripts/backup-db.sh五、Rsync 服务模式
除了走 SSH,Rsync 还可以以守护进程方式运行:
服务端 /etc/rsyncd.conf:
[backup]
path = /data/backup
comment = Backup Directory
read only = no
auth users = backupuser
secrets file = /etc/rsyncd.secrets客户端同步:
rsync -av /local/data/ backupuser@server::backup/六、避坑指南
路径末尾斜杠有区别
/source/→ 同步目录内容/source→ 同步目录本身
- --delete 谨慎使用
会删除目标端多余文件,建议先用-n干跑确认 - 大文件用 -P
支持断点续传,传一半断了下次继续 - SSH 端口不是 22
用-e "ssh -p 2222"指定 - 备份要有异地
本机备份防不了硬盘损坏,至少要同步到另一台机器
总结
Rsync 是运维工具箱里最趁手的备份工具——简单、可靠、高效。花半小时配好自动备份,能省下未来无数个通宵恢复数据的夜晚。数据无价,备份趁早。
评论