异地备份(sync+inotify)+增量 本地增量备份 检查文件是否修改 判断文件是否存在

备份:异地备份(sync+inotify)+增量

rsync+inotify—》制作异地镜像站点
目的:为异地备份做好准备工作

本地 增量备份脚本

#!/bin/bash

set -o errexit  #出错脚本退出
set -o nounset  #变量不存在脚本退出
set -o pipefail #管道错误脚本退出


SOURCE_DIR="/data/"
TARGET_START_DIR="/bak/"          
TARGET_DIR="${TARGET_START_DIR}/$(date '+%Y-%m-%d_%H:%M:%S')"
LATEST_LINK="${TARGET_START_DIR}/latest"  
mkdir -p "${TARGET_START_DIR}"
rsync -av --delete \
"${SOURCE_DIR}/" \
 --link-dest "${LATEST_LINK}" \
 "${TARGET_DIR}"

rm -rf "${LATEST_LINK}"
ln -s "${TARGET_DIR}" "${LATEST_LINK}"
~  
==================================================================================
# 脚本解释

mkdir /bak

TARGET_DIR=/bak/`date '%Y-%m-%d_%H:%M:%S'`

rsync -a --delete /data/ --link-dest /bak/latest $DIR

rm -rf /bak/latest
ln -s $DIR /bak/latest



#注:执行脚本是出现如下不是报错  是新建的文件夹
[root@backup ~]# ./a.sh 
--link-dest arg does not exist: /bak//latest
[root@backup backup]# mkdir /data/
[root@backup ~]# echo 111 > /data/1.txt
[root@backup ~]# echo 222 > /data/2.txt
[root@backup ~]# echo 333 > /data/3.txt
[root@backup ~]# ll /data/*
-rw-r--r-- 1 root root 4 Apr 17 10:54 /data/1.txt
-rw-r--r-- 1 root root 4 Apr 17 10:54 /data/2.txt
-rw-r--r-- 1 root root 4 Apr 17 10:54 /data/3.txt

[root@backup ~]# cat a.sh 
#!/bin/bash

set -o errexit
set -o nounset
set -o pipefail


SOURCE_DIR="/data/"
TARGET_START_DIR="/bak/" 
TARGET_DIR="${TARGET_START_DIR}/$(date '+%Y-%m-%d_%H:%M:%S')"

LATEST_LINK="${TARGET_START_DIR}/latest"
 
mkdir -p "${TARGET_START_DIR}"
rsync -a --delete \
"${SOURCE_DIR}/" \
 --link-dest "${LATEST_LINK}" \
 "${TARGET_DIR}"

rm -rf "${LATEST_LINK}"
ln -s "${TARGET_DIR}" "${LATEST_LINK}"
[root@backup ~]# chmod +x a.sh 
[root@backup ~]# ./a.sh 
sending incremental file list
--link-dest arg does not exist: /bak//latest    #创建目录   不是报错
./

#新生成以时间节点的第一次全量备份   inote不同
[root@backup ~]# ls -i /bak/2021-04-17_10\:57\:15/*
67113386 /bak/2021-04-17_10:57:15/1.txt
67113388 /bak/2021-04-17_10:57:15/2.txt
67113389 /bak/2021-04-17_10:57:15/3.txt
[root@backup ~]# ls -i /data/*
1272085 /data/1.txt  1272093 /data/2.txt  1272094 /data/3.txt

#增加文件(增量备份)只备份增加的数据inote是全新的  没改变的文件做软连接跟之前的inote号一样
[root@backup ~]# echo 444 > /data/4.txt
[root@backup ~]# ./a.sh 
[root@backup ~]# ls -i /bak/2021-04-17_1
2021-04-17_10:57:15/ 2021-04-17_11:13:14/ 
[root@backup ~]# ls -i /bak/2021-04-17_11\:13\:14/*
 67113386 /bak/2021-04-17_11:13:14/1.txt
 67113388 /bak/2021-04-17_11:13:14/2.txt
 67113389 /bak/2021-04-17_11:13:14/3.txt
134319837 /bak/2021-04-17_11:13:14/4.txt

[root@backup ~]# echo 222 >> /data/1.txt 
[root@backup ~]# ./a.sh 
[root@backup ~]# cat /bak/2021-04-17_1
2021-04-17_10:57:15/ 2021-04-17_11:13:14/ 2021-04-17_11:21:18/
[root@backup ~]# cat /bak/2021-04-17_11\:21\:18/1.txt 
111
222
[root@backup ~]# ls -i /bak/2021-04-17_11\:21\:18/*
202524909 /bak/2021-04-17_11:21:18/1.txt
 67113388 /bak/2021-04-17_11:21:18/2.txt
 67113389 /bak/2021-04-17_11:21:18/3.txt
134319837 /bak/2021-04-17_11:21:18/4.txt

项目案例(客户端----服务端)

准备环境

主机IP主机角色
nfs192.168.15.31客户端
backup192.168.15.41服务端

项目需求

客户端:
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个⽉的备份数据,其余的全部删除

配置邮件----在服务端

#服务端
[root@backup backup]# yum install mailx -y
[root@backup backup]# vim /etc/mail.rc
[root@backup ~]# cat /etc/mail.rc 
set from=449330597@qq.com
set smtp=smtp.qq.com  
set smtp-auth-user=449330597
set smtp-auth-password=授权码
set smtp-auth=login 

进入qq邮箱设置POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务开启

开启授权码
vtxjlcbaqywuiheg

验证到邮箱查看
[root@backup ~]# mail -s '测试文件' xxxxxxxxx@qq.com<md5sum.log

客户端

#!/bin/bash

ROOT_DIRECTORY=/backup
HOSTNAME=$(hostname)
LOCALOST=`hostname -I | awk '{print $2}'`
DATE=`date +%F`

DIR=$ROOT_DIRECTORY/${HOSTNAME}_${LOCALOST}_${DATE}

mkdir -pv $DIR

cd $DIR

tar -cvzf system_file.tar.gzd  /var/log/messages

# 记录MD5哈希值
md5sum system_file.tar.gz > md5sum.log

rsync -avz $DIR   yeg@backup::backup

# 00 01 * * *  deploy.sh
find /backup -mtime +7 -exec rm -rf {} \;

服务端

#!/bin/bash

ROOT_DIRECTORY=/backup
CLIENT_HOSTNAME=nfs
CLIENT_HOST=`ping -c1 ${CLIENT_HOSTNAME} | awk 'NR==1{print $2}'`
DATE=`date +%F`

cd ${ROOT_DIRECTORY}/${CLIENT_HOSTNAME}_${CLIENT_HOST}_${DATE}

md5sum -c md5sum.log 

# 发送邮件
mail -s '测试文件'1246545631@qq.com<md5sum.log

find /backup -mtime +180 -exec rm -rf {} \;

安装inotify

监控数据源是否有变化

#客户端
[root@nfs yum.repos.d]# cat epel.repo 
[epel]
name='epel repo'
baseurl=https://repo.huaweicloud.com/epel/7/x86_64/
gpgcheck=0
[root@nfs yum.repos.d]# vim epel.repo
[root@nfs yum.repos.d]# yum clean all
[root@nfs yum.repos.d]# yum makecache

[root@nfs yum.repos.d]#  yum install -y inotify-tools

测试监控在前台运行

#注:nfs客户端开启两个中断 一个终端用来监控

#在nfs[0]执行
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /var/log/messages

#在nfs[1]执行
[root@nfs backup]#echo "111111" > /backup/index.html
#在nfs[0]执行可以看到输出结果

#在nfs[0]执行
[root@nfs backup]# vim aa-sj.sh
[root@nfs backup]# cat aa-sj.sh 
#!/bin/bash

ROOT_DIRECTORY=/backup
HOSTNAME=$(hostname)
LOCALOST=`hostname -I | awk '{print $2}'`
DATE=`date +%F`

DIR=$ROOT_DIRECTORY/${HOSTNAME}_${LOCALOST}_${DATE}

mkdir -pv $DIR

cd $DIR

tar -cvzf system_file.tar.gz  /var/log/messages

# 记录MD5哈希值
md5sum system_file.tar.gz > md5sum.log

rsync -avz $DIR   yeg@backup::backup

# 00 01 * * *  deploy.sh
find /backup -mtime +7 -exec rm -rf {} \;

[root@nfs backup]# echo "111" > /var/log/messages

#监控脚本
#在nfs[0]执行
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /var/log/messages | while read line; do /backup/aa-sj.sh ; done

#在nfs[1]执行
[root@nfs backup]# echo "111" > /var/log/messages

#在服务端查看
[root@backup ~]# cd /backup
[root@backup backup]# ll
[root@backup backup]# cd nfs_172.16.1.31_2021-04-20/
[root@backup nfs_172.16.1.31_2021-04-20]# ll
total 8
-rw-r--r-- 1 rsync rsync  53 Apr 20 00:02 md5sum.log
-rw-r--r-- 1 rsync rsync 129 Apr 20 00:02 system_file.tar.gz
[root@backup nfs_172.16.1.31_2021-04-20]# tar -xf system_file.tar.gz 
[root@backup nfs_172.16.1.31_2021-04-20]# ll
total 8
-rw-r--r-- 1 rsync rsync  53 Apr 20 00:02 md5sum.log
-rw-r--r-- 1 rsync rsync 129 Apr 20 00:02 system_file.tar.gz
drwxr-xr-x 3 root  root   17 Apr 20 00:05 var
[root@backup nfs_172.16.1.31_2021-04-20]# cat var/log/messages 
111

inotify监控备份后台运行

#客户端放在后台执行
[root@nfs ~]# nohup ./inotify.sh &
[root@nfs ~]# cat inotify.sh 
#!/bin/bash
export RSYNC_PASSWORD=1

inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /var/log/messages | while read line; do /backup/aa-sj.sh ; done

[root@nfs backup]# echo "111" > /var/log/messages

#在服务端查看
[root@backup ~]# cd /backup
[root@backup backup]# ll
[root@backup backup]# cd nfs_172.16.1.31_2021-04-20/
[root@backup nfs_172.16.1.31_2021-04-20]# ll
total 8
-rw-r--r-- 1 rsync rsync  53 Apr 20 00:02 md5sum.log
-rw-r--r-- 1 rsync rsync 129 Apr 20 00:02 system_file.tar.gz
[root@backup nfs_172.16.1.31_2021-04-20]# tar -xf system_file.tar.gz 
[root@backup nfs_172.16.1.31_2021-04-20]# ll
total 8
-rw-r--r-- 1 rsync rsync  53 Apr 20 00:02 md5sum.log
-rw-r--r-- 1 rsync rsync 129 Apr 20 00:02 system_file.tar.gz
drwxr-xr-x 3 root  root   17 Apr 20 00:05 var
[root@backup nfs_172.16.1.31_2021-04-20]# cat var/log/messages 
111

操作

#客户端
[root@yum01 ~]# vim client.sh 
#!bin/bash


#定义变量

SRC=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)

DIR=${SRC}/${HOSTNAME}_${IP}_${DATE}

#判断是否有目录 没有就创建目录
[ -d $DIR ] || mkdir -p $DIR

cd $DIR

#打包文件
tar -czvf ${DATE}_system.tar.gz  /var/log/messages

#md5sum 效验
[ -f md5sum.log ] || md5sum ${DATE}_system.tar.gz > md5sum.log

#将备份数据推送到备份服务器
rsync -avz $DIR rsync@192.168.15.50::bak

#删除7天外的数据
find /bak -mtime +7 |xargs rm -rf
==================================================================================================
#服务端
[root@yum02 ~]# vim server.sh 
#!bin/bash

#定义变量
DIR=/bak
HOSTNAME=yum01
IP=`ping -c1 172.16.15.40 |awk 'NR==1{print $2}'`
DATE=$(date +%F)

cd  ${DIR}/${HOSTNAME}_${IP}_${DATE}/

#校验文件
md5sum -c md5sum.log

#将效验结果发送给管理员邮箱
mail -s "备份文件 " 1246545631@qq.com <md5sum.log

# 清除超过180天的数据
find /bak -mtime +180 -exec rm -rf {} \;

[root@yum02 bak]# vim /etc/mail.rc 

set from=1246545631@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1246545631
set smtp-auth-password=授权码
set smtp-auth=login
===============================================================================================
#inotify实时监控(在客户端)
[root@yum01 ~]# vim aaa.sh 
#!/bin/bash
export RSYNC_PASSWORD=1

dir=/var/log/messages   #监控的文件
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write ${dir} | while read line; do bash /root/client.sh ; done &>/dev/null &

不同版本

准备服务端,分析脚本逻辑
#创建目录
mkdir /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date +%F)

#打包目录
tar zcf /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date +%F)/conf.tar.gz /var/log/messages

#推送文件
rsync -avz /backup/ rsync_backup@*.*.*.*::backup

客户端

[root@web01 ~]# vim client.sh 

#!/bin/bash

#用于备份

DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I |awk '{print $2}')
DATE=`date +%F`

SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

[ -d $SRC ] || mkdir -p $SRC

cd $SRC

tar -czPf conf.tar.gz /var/log/messages

md5sum conf.tar.gz > resulet.flag


export RSYNC_PASSWORD=1

rsync -az $SRC yeg@192.168.15.45::backup


find $DIR -type d -mtime +7 | xargs rm -rf

#定时任务
crontab -e
0 1 * * * /bin/bash /root/client.sh

服务端

#/etc/mail.rc模板
set from=xxx@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=#校验值
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
[root@backup ~]# yum install mailx -y
#配置/etc/mail.rc文件
[root@backup ~]# mail -s "校验结果" xxx@qq.com < ceshi.txt
[root@fwd ~]# vim server.sh 

#脚本

#!/bin/bash
#baimo
#用于备份
DIR=/backup
HOSTNAME=web01
IP="172.16.1.35"
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

cd $SRC

#校验文件
md5sum -c $SRC/resulet.flag > $DIR/result.txt

#将校验结果发送给管理员邮箱
mail -s "$DATE备份文件 校验的结果" 1246545631@qq.com < $DIR/result.txt

#删除6个月之前的数据
find $DIR/ -type d -mtime +180 | xargs rm -rf
#服务端脚本加入定时任务
 crontab -e
 0 7 * * * /bin/bash /root/server.sh &> /dev/null

Rsync结合inotify

#安装
[root@web1 ~]# yum install inotify-tools -y
#参数
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
#测试
/usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write /var/log/messages |  while read line; do bash /root/client.sh ; done

[root@backup ~]# vim rsyn-inotify.sh

#客户端
[root@web01 ~]# vim rsync-inotify.sh 
#!/bin/bash
#实时推送备份文件脚本

export RSYNC_PASSWORD=1

dir=/var/log/messages   #监控的文件
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write ${dir} | while read line; do bash /root/client.sh ; done &>/dev/null &

检查文件是否修改

[root@nfs ~]# echo 123 > index.html
[root@nfs ~]# ll
total 12
-rw-------. 1 root root 1692 Apr 14 19:38 anaconda-ks.cfg
-rw-r--r--  1 root root    4 Apr 19 21:17 index.html
[root@nfs ~]# cat index.html
123
[root@nfs ~]# md5sum  index.html
ba1f2511fc30423bdbb183fe33f3dd0f  index.html
[root@nfs ~]# echo "333" >> index.html
[root@nfs ~]# md5sum  index.html
a9b2ef5da91f8928a399914aa83a0686  index.html

[root@nfs ~]# md5sum  index.html > log
[root@nfs ~]# cat log
a9b2ef5da91f8928a399914aa83a0686  index.html
[root@nfs ~]# md5sum -c log 
index.html: OK

[root@nfs ~]# echo "444" >> index.html 
[root@nfs ~]# md5sum -c log 
index.html: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

判断文件是否存在

[root@nfs backup]# [ -f nfs_172.16.1.31_2021-04-19/system_file.tar.gz ]
[root@nfs backup]# echo $?
0
[root@nfs backup]# [ -f nfs_172.16.1.31_2021-04-19/system_file.tar.gzjhwe ]
[root@nfs backup]# echo $?
1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琴声浮或沉__听懂只一人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值