-a #归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l ******
-v #详细模式输出, 打印速率, 文件数量等 ******
-z #传输时进行压缩以提高效率 ******
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=1.txt #指定排除不需要传输的文件 *****
--exclude-from=file #指定排除不需要传输的file下指定的文件内容(不包括file) ******
--bwlimit=100 #限速传输 ******
--partial #断点续传
--delete #让目标目录和源目录数据保持一致 ******
--password-file=xxx #使用密码文件
#1.--exclude-from=file 排除参数
#创建多个文件
[root@web01 ~]# touch {1..10}.txt
[root@web01 ~]# ll
总用量 12
-rw-r--r-- 1 root root 0 4月 28 07:29 10.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 1.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 2.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 3.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 4.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 5.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 6.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 7.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 8.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 9.txt
#编辑要指定的排除文件内容
[root@web01 ~]# vim a.txt
1.txt
2.txt
3.txt
#指定排除文件推送内容
[root@web01 ~]# rsync -avz ./* [email protected]::backup --exclude-from
=a.txt
#2.--bwlimit=100 限速传输
#创建一个1G 文件
[root@web01 opt]# dd if=/dev/zero of=./1.txt bs=1M count=1000
记录了1000+0 的读入
记录了1000+0 的写出
1048576000字节(1.0 GB)已复制,6.9373 秒,151 MB/秒
#限速1M每秒推送
[root@web01 opt]# rsync -avzP 1.txt [email protected]::backup --bwlimit=1
1.txt
114,130,944 10% 1.01MB/s 0:15:06
#3.--delete 数据一致(无差异同步)
#查看客户端数据
[root@web01 opt]# rm -rf 1.txt 2.txt 3.txt
[root@web01 opt]# ll
总用量 4
-rw-r--r-- 1 root root 0 4月 28 07:29 10.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 4.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 5.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 6.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 7.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 8.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 9.txt
-rw-r--r-- 1 root root 18 4月 28 07:31 a.txt
#执行数据一致同步(推送)
[root@web01 opt]# rsync -avz ./* [email protected]::backup --delete
#查看服务端数据
[root@backup backup]# ll
总用量 4
-rw-r--r-- 1 root root 0 4月 28 07:29 10.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 4.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 5.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 6.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 7.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 8.txt
-rw-r--r-- 1 root root 0 4月 28 07:29 9.txt
-rw-r--r-- 1 root root 18 4月 28 07:31 a.txt
#注意:
拉取时:客户端数据与服务端数据一致,以服务端数据为准
推送时:服务端数据一客户端数据一致,以客户端数据为准
#1.创建备份目录 尝试获取信息
[root@web01 ~]# mkdir /backup
[root@web01 ~]# hostname
web01
[root@web01 ~]# hostname -I
10.0.0.7 172.16.1.7
[root@web01 ~]# hostname -I | awk '{print $NF}'
172.16.1.7
[root@web01 ~]# date +%F
2020-11-19
#2.结合获取信息创建目录
[root@web01 ~]# mkdir /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date +%F)
[root@web01 ~]# mkdir /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`
[root@web01 ~]# ll /backup/
drwxr-xr-x. 2 root root 6 Nov 19 10:00 web01_172.16.1.7_2020-11-19
#3.打包数据
#打包
[root@web01 ~]# tar zcf conf.tar.gz /var/log/messages
#移动
[root@web01 ~]# mv conf.tar.gz /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date
+%F)
#或者使用下面方式
#直接打包到目录
[root@web01 ~]# tar zcf /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date
+%F)/conf.tar.gz /var/log/message
#4.推送文件
[root@web01 ~]# rsync -avz /backup/ [email protected]::backup
[root@web01 ~]# vim client.sh
#!/bin/bash
#1.定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}
#2.创建表备份目录
mkdir $SRC -p
#3.打包文件
cd /var && tar zcf $SRC/conf.tar.gz ./log/messages
#4.推送文件
export RSYNC_PASSWORD=123456
rsync -az $DIR/ [email protected]::backup
[root@web01 ~]# crontab -e
#每天凌晨1点执行备份脚本
0 1 * * * /bin/bash /root/client.sh
只保留七天 的数据
#模拟30天数据
[root@web01 ~]# for i in {1..30};do date -s 2020/11/$i;sh client.sh;done
#删除七天前的数据
[root@web01 ~]# find /backup/ -type d -mtime +7 | xargs rm -rf
[root@web01 ~]# vim client.sh
#!/bin/bash
#1.定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}
#2.创建表备份目录
mkdir $SRC -p
#3.打包文件
cd /var && tar zcf $SRC/conf.tar.gz ./log/messages
#4.推送文件
export RSYNC_PASSWORD=123456
rsync -az $DIR/ [email protected]::backup
#5.删除七天前数据
find $DIR/ -type d -mtime +7 | xargs rm -rf
[root@web01 ~]# vim client.sh
#!/bin/bash
#1.定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}
#2.创建表备份目录
[ -d $SRC ] || mkdir $SRC -p
#3.打包文件
[ -f $SRC/conf.tar.gz ] || cd /var && tar zcf $SRC/conf.tar.gz ./log/messages
#4.推送文件
export RSYNC_PASSWORD=123456
rsync -az $DIR/ [email protected]::backup
#5.删除七天前数据
find $DIR/ -type d -mtime +7 | xargs rm -rf
(md5只能对文件生成校验码,对目录不可以)
[root@web01 ~]# vim client.sh
#!/bin/bash
#1.定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}
#2.创建表备份目录
mkdir $SRC -p
#3.打包文件
cd /var && tar zcf $SRC/conf.tar.gz ./log/messages
#4.生成校验码
md5sum $SRC/conf.tar.gz > $SRC/flag
#5.推送文件
export RSYNC_PASSWORD=123456
rsync -az $DIR/ [email protected]::backup
#6.删除七天前数据
find $DIR/ -type d -mtime +7 | xargs rm -rf
[root@web01 ~]# vim server.sh
md5sum -c /backup/*_$(date +%F)/flag_2020-11-30 #编辑校验脚本文件
[root@web01 ~]#date -s 2020/11/30 #修改当前时间
[root@web01 ~]#sh server.sh #执行校验脚本
/backup/web01_172.16.1.7_2020-11-30/conf.tar.gz:OK #校验成功显示
#1.服务端配置邮件功能
[root@backup ~]# yum install mailx -y
[root@backup ~]# vim /etc/mail.rc
set from=[email protected]
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=[email protected]
set smtp-au
set nss-config-dir=/etc/pki/nssdb/
#2.测试发送邮件
[root@backup backup]# math-password=123123123
set smtp-auth=login
set ssl-verify=ignoreil -s "校验结果" [email protected] < server.sh
set from=[email protected]
set smtp
服务端脚本
#!/bin/bash
#1.定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}
#2.校验文件
md5sum -c $DIR/*_$DATE/flag > $DIR/result.txt
#3.将校验结果发送给管理员邮箱
mail -s "$DATE备份文件 校验结果" [email protected] < $DIR/result.txt
find $DIR/ -type d -mtime +180 | xargs rm -rf
[root@backup ~]# crontab -e
#服务端每天7点将校验备份结果发给管理员
0 7 * * * /bin/bash /root/server.sh &> /dev/null
[root@web01 ~]# yum -y install inotify-tools
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
[root@web01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e
create,modify,delete,attrib,close_write /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 . [email protected]::backup --password-file=/etc/rsync.passwd >/dev/null 2>&1
done &
精油版
#!/bin/bash
src=/data
des=backup
rsync_passwd_file=/etc/rsync.passwd
ip1=172.16.1.41
user=rsync_backup
cd ${src}
/usr/bin/inotifywait -mrq --format '%Xe %w%f' -e
modify,create,delete,attrib,close_write,move ./ | while read file
do
CREATE /backup/ 1.txt
INO_EVENT=$(echo $file | awk '{print $1}')
INO_FILE=$(echo $file | awk '{print $2}')
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~
'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
then
rsync -azcR --password-file=${rsync_passwd_file} ${INO_FILE} ${user}@${ip1}::${des}
fi
if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
then
rsync -azR --delete --password-file=${rsync_passwd_file} $(dirname ${
INO_FILE})
${user}@${ip1}::${des} >/dev/null 2>&1
fi
if [[ $INO_EVENT =~ 'ATTRIB' ]]
then
if [ ! -d "$INO_FILE" ]
then
rsync -azcR --password-file=${rsync_passwd_file} $(dirname ${
INO_FILE})
${user}@${ip1}::${des} >/dev/null 2>&1
fi
fi
done &