一、先明确备份项目里的主机分工¶
原始笔记在正式写脚本前先给出了环境介绍:
| 主机 | 角色 |
|---|---|
harbor01 |
存放备份,作为服务端 |
nfs01 |
生成备份,作为客户端 |
这说明整个项目是一个典型的“客户端生成备份、服务端集中存放与校验”的模式。
二、客户端备份脚本要解决什么问题¶
客户端脚本的核心目标并不复杂,主要就是完成下面五件事:
1、定义备份变量 2、生成备份目录 3、打包压缩关键内容 4、生成校验信息 5、把备份推送到服务端
这五步串起来,就是一套完整的自动化备份流程。
三、客户端备份脚本实战¶
3.1 创建脚本目录¶
mkdir /scripts
3.2 客户端脚本示例¶
原始笔记中的客户端脚本如下:
#!/bin/bash
#author: zq
#desc: 系统备份脚本
#version: v1.0
#1、变量
ip=`hostname -I | awk '{print $1}'`
time=`date +%F_%w`
backup_dir=/backup/${ip}
backup_server=192.168.1.67
backup_file=conf-${time}.tar.gz
#2、备份
if [ ! -d ${backup_dir} ]
then
mkdir -p ${backup_dir}
fi
tar zcf ${backup_dir}/${backup_file} /etc/ /var/spool/cron/
#3、md5校验
md5sum ${backup_dir}/${backup_file} > ${backup_dir}/print.md5
#4、推送
rsync -a ${backup_dir} rsync_backup@${backup_server}::backup --password-file=/etc/rsync.client
#5、清理
find $backup_dir -type f -name "*.tar.gz" -mtime +7 | xargs rm -f
3.3 这个脚本的关键点¶
3.3.1 备份目录按主机 IP 分开¶
脚本里使用:
backup_dir=/backup/${ip}
这样每台客户端的备份都能按 IP 独立归档,后续服务端统计会更清晰。
3.3.2 备份文件名里带日期和星期¶
time=`date +%F_%w`
backup_file=conf-${time}.tar.gz
这样做的好处是:
- 文件名可读性强
- 便于按天定位备份
- 同名覆盖风险更低
3.3.3 备份内容以配置和计划任务为主¶
脚本打包的是:
/etc/
/var/spool/cron/
这和项目背景中的思路一致:优先备份配置文件和定时任务等关键系统信息。
3.3.4 生成 MD5 校验文件¶
md5sum ${backup_dir}/${backup_file} > ${backup_dir}/print.md5
这样服务端后续就能对备份完整性做自动校验。
3.3.5 自动清理旧备份¶
find $backup_dir -type f -name "*.tar.gz" -mtime +7 | xargs rm -f
这表示把 7 天前的历史备份自动删除,避免客户端本地备份目录无限膨胀。
四、服务端备份脚本实战¶
4.1 创建脚本目录¶
mkdir /scripts
4.2 服务端脚本示例¶
原始笔记中的服务端脚本如下:
#!/bin/bash
#author: zq
#desc: 系统备份脚本
#version: v1.0
#0、变量
result_file=/scripts/result.txt
#1、清理旧的备份
find /backup -type f -name "*.tar.gz" -mtime +7 | xargs rm -f
#2、统计备份结果
find /backup -type f -name "*.tar.gz" | xargs ls -lhd | awk -F '[ /]+' 'BEGIN{print "IP地址","备份文件名字","大小"} {print $(NF-1),$NF,$5}' | column -t > ${result_file}
#3、MD5校验
echo "#下面信息为备份的MD5校验信息" >> ${result_file}
find /backup -name "print.md5" | xargs md5sum -c >> ${result_file}
#4、发送邮件
mail -s "每日备份结果" 1904763431@qq.com < ${result_file}
4.3 服务端脚本在做什么¶
服务端脚本主要负责四件事:
- 清理过期备份
- 汇总当前备份结果
- 做 MD5 校验
- 把结果通过邮件发出去
这意味着服务端不只是“放文件”,还承担了校验与汇总职责。
五、定时任务怎么安排¶
5.1 客户端定时执行备份¶
crontab -e
00 01 * * * sh /scripts/client_bak.sh > /backup/result-`date +%F`.txt 2>&1
表示每天 01:00 执行客户端备份。
5.2 服务端定时执行校验与汇总¶
crontab -e
00 02 * * * sh /scripts/server_bak.sh > /backup/result-`date +%F`.txt 2>&1
表示每天 02:00 执行服务端汇总。
这样的顺序很合理:
- 先让客户端完成备份
- 再让服务端统一统计和校验
六、如何验证备份项目是否真的成功¶
原始笔记给出了两种验证方式。
6.1 看邮箱通知¶
如果邮件发送配置正常,可以直接在邮箱里查看备份结果通知。
6.2 在服务端查看结果文件¶
cat /scripts/result.txt
原始笔记中的结果示例包括:
- IP 地址
- 备份文件名
- 文件大小
- MD5 校验结果
例如:
IP地址 备份文件名字 大小
192.168.1.66 conf-2023-12-03_0.tar.gz 12M
#下面信息为备份的MD5校验信息
/backup/192.168.1.66/conf-2023-12-03_0.tar.gz: OK
七、这个备份项目里都用到了哪些技术¶
原始笔记在总结里提到,这个项目串联了不少基础技术:
rsync- 定时任务
cron md5sum- 邮件通知
- Shell 脚本
- 三剑客
tarfind
这也是这类项目非常适合练手的原因:它既不只是一条命令,也不是特别重型的系统,而是把很多基础能力串成了完整方案。
八、小结¶
这个自动化备份项目最值得学习的地方,不只是“怎么备份”,而是它体现出了一套标准运维流程:
- 客户端负责生成备份
- 服务端负责集中保存
- 脚本负责自动执行
- MD5 负责完整性校验
- 邮件负责结果反馈
- 定时任务负责让整个流程每天稳定运行
把这套链路吃透之后,后面再去扩展数据库备份、异地容灾和更复杂的归档策略,就有了很好的基础。