Linux 架构篇 知识心得04 rsync备份实例
时间:2021-10-23
本文章向大家介绍Linux 架构篇 知识心得04 rsync备份实例,主要包括Linux 架构篇 知识心得04 rsync备份实例使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
RSYNC实用案例
客户端需求:
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
服务端需求:
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
1.客户端运行脚本
#!/bin/bash
DIR=/backup
IP=$(hostname -i)
TIME=$(date +%F)
SRC=$DIR/nfs_${IP}_${TIME}
#客户端需求:
#1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
[ -d $SRC ] || mkdir $SRC
#2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
tar -czf $SRC/${TIME}.backup.tar.gz `find /etc/ -type f` &>/dev/null
#建立文件校验文件
md5sum /$SRC/${TIME}.backup.tar.gz >/$SRC/${TIME}.md5sum
#3.客户端最后将备份的数据进行推送至备份服务器
rsync -avz /backup/ rsync_backup@rsync::backup --password-file=/etc/rsync.passwd
#4.客户端每天凌晨1点定时执行该脚本
# 通过 crontab -e 设置定时任务: 0 1 * * * /bin/bash /root/kehuduan.sh
#5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
find $DIR/ -mtime +7 |xargs rm -rf
2.服务端运行脚本
#!/bin/bash
DIR=/backup
IP="172.16.1.31"
TIME=$(date +%F)
SRC=$DIR/nfs_${IP}_${TIME}
#服务端需求:
#1.服务端部署rsync,用于接收客户端推送过来的备份数据
rpm -q rsync &>/dev/null
[ $? -ne 0 ]|| yum install rsync -y &>/dev/null
#2.服务端需要每天校验客户端推送过来的数据是否完整
md5sum -c $SRC/${TIME}.md5sum >$SRC/result.txt
#3.服务端需要每天校验的结果通知给管理员
mail -s "${TIME}备份文件 校验结果" 446010175@qq.com <$SRC/result.txt &>/dev/null
#4.服务端仅保留6个月的备份数据,其余的全部删除
find $DIR/ -mtime +180 |xargs rm -rf
3.rsync结合inotify案例(客户端)
3.1 安装inotify
[root@web01 ~]# yum -y install inotify-tools
3.2 inotify的参数
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
3.3 测试命令
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup
# inotify 自动监测脚本,实现监控/backup目录以及无差异同步(重要)
[root@backup ~]# vim rsyn-inotify.sh
#!/bin/bash
dir=/backup
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line;do
cd $dir && rsync -az -R --delete . rsync_backup@172.16.1.31::backup --password-file=/etc/rsync.passwd >/dev/null 2>&1
done &
3.4 客户端实现
#!/bin/bash
DIR=/backup
IP=$(hostname -i)
TIME=$(date +%F)
SRC=$DIR/nfs_${IP}_${TIME}
INOTIFY_DIR=/backup/
# 自动监测命令,检查目标目录是否有更新
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib ${INOTIFY_DIR} |while read line
do
#已知确认的是每日产生一个打包压缩文件,若已产生文件,就不需要循环监测(只监测一次)
if [ -f $SRC/${TIME}.backup.tar.gz ];then
continue
fi
#客户端需求:
#1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2021-08-03
[ -d $SRC ] || mkdir $SRC
#2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2021-08-03
tar -czf $SRC/${TIME}.backup.tar.gz `find /etc/ -type f` &>/dev/null
#建立文件校验文件
md5sum /$SRC/${TIME}.backup.tar.gz >/$SRC/${TIME}.md5sum
#3.客户端最后将备份的数据进行推送至备份服务器
rsync -avz /backup/ rsync_backup@rsync::backup --password-file=/etc/rsync.passwd
#4.客户端每天凌晨1点定时执行该脚本
# 通过 crontab -e 设置定时任务: 0 1 * * * /bin/bash /root/kehuduan.sh
#5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
find $DIR/ -mtime +7 |xargs rm -rf
done &
3.5 服务端实现??
#!/bin/bash
DIR=/backup
IP="172.16.1.31"
TIME=$(date +%F)
SRC=$DIR/nfs_${IP}_${TIME}
INOTIFY_DIR=/backup/
#服务端需求:
#1.服务端部署rsync,用于接收客户端推送过来的备份数据
rpm -q rsync &>/dev/null
[ $? -ne 0 ]|| yum install rsync -y &>/dev/null
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib ${INOTIFY_DIR} | while read line
do
echo $line
if [ -f $SRC/result.txt ];then
continue
fi
if [ -d $SRC ];then
if [ ! -f $SRC/${TIME}.md5sum ];then
continue
fi
fi
#2.服务端需要每天校验客户端推送过来的数据是否完整
#3.服务端需要每天校验的结果通知给管理员
md5sum -c $SRC/${TIME}.md5sum >$SRC/result.txt
if [ $? -ne 0 ];then
echo "$SRC 文件校验失败" >>$SRC/result.txt
else
mail -s "${TIME}备份文件 校验结果" 446010175@qq.com <$SRC/result.txt &>/dev/null
fi
#4.服务端仅保留6个月的备份数据,其余的全部删除
find $DIR/ -mtime +180 |xargs rm -rf
done
原文地址:https://www.cnblogs.com/ws7788/p/15449851.html
- Mybatis_day02
- Golang构建HTTP服务(一)--- net/http库源码笔记
- Golang构建HTTP服务(二)--- Handler,ServeMux与中间件
- 使用Let's Encrypt的SSL证书配置HTTPS手记
- Mybatis_day01
- golang 如何验证struct字段的数据格式
- ggolot2 画ROC曲线
- 47. 访问MySql数据库实现增删改查 | 厚土Go学习笔记
- 39. channel管道 | 厚土Go学习笔记
- springmvc学习第二天
- 厚土Go学习笔记 | 38. goroutine轻量级线程
- 厚土Go学习笔记 | 37. 图片(image)生成器
- 编写地道的Go代码
- 开发你不能忽略的问题?JavaScript(JS)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python入门教程笔记(一)简介、变量及基本数据类型
- C#知识点讲解之C#delegate、event、Action、EventHandler的使用和区别
- typescript高级用法之infer的理解与使用
- 基于业务场景下的图片/文件上传方案总结
- LeetCode96|二叉搜索树中的搜索
- LeetCode95|字符串中的第一个唯一字符
- LeetCode94|Pow(x,n)
- LeetCode93|数值的整数次方
- LeetCode92|排序数组
- 缓存 | 从本地缓存到分布式缓存, Guava, Caffeine, Memcached, Redis
- WebView三问—B站真题
- C++核心准则T.140:为所有可能重用的操作命名
- Service三问
- 事件分发机制三问
- C++核心准则T.141:如果你需要只在一个地方使用的简单的函数对象,使用无名的lambda表达式