一、rsync传输模式

1.本地模式
2.远程模式
3.守护进程模式

二、守护进程模式

1.安装rsync
[root@backup ~]# yum -y install rsync

2.配置rsync
[root@backup /backup]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

3.创建用户
[root@backup ~]#useradd rsync -s /sbin/nologin -M

4.创建虚拟用户的密码文件
[root@backup ~]#echo "rsync_backup:123456" > /etc/rsync.passwd

[root@backup ~]#chmod 600 /etc/rsync.passwd

5.创建文件目录
[root@backup ~]#mkdir /bachup

[root@backup ~]#chown -R rsync:rsync /backup

6.启动服务
[root@backup ~]# systemctl start rsyncd

7.客户端验证
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./
[root@web01 ~]# rsync -avz file1 rsync_backup@172.16.1.41::backup

三、守护进程语法

1.pull拉取数据命令
#语法
rsync [OPTION...] [USER@]HOST::SRC... [DEST]

#示例:
拉取rsync备份服务的"backup模块"数据至本地/mnt目录
[root@nfs01 ~]# rsync -avz rsync_backup@192.172.16.1.41::backup /mnt/
rsync #命令
-avz #选项
rsync_backup #远程主机用户(虚拟用户)
192.172.16.1.41 #远程主机地址
::backup #远程主机模块(不是目录)
/mnt/ #将远程主机数据备份至本地什么位置

#注意:
如果是拉取数据,远端服务器源数据目录权限可以为任意权限

2.push推送数据命令
#语法
rsync [OPTION...] SRC... [USER@]HOST::DEST

#示例
将本地/mnt目录推送至rsync备份服务器的backup模块
[root@nfs01 ~]# rsync -avz /mnt/ rsync_backup@192.172.16.1.41::backup
rsync #命令
-avz #选项
/mnt/ #本地文件
rsync_backup #远程主机用户(虚拟用户)
192.172.16.1.41 #远程主机地址
::backup #远程主机模块(不是目录)

#注意:
如果是推送数据,远端接收文件的目录权限必须是rsync权限

四、rsync常见报错

1.#报错一:
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backu ./
@ERROR: Unknown module 'backu'

#原因:
模块名字与服务端配置没有对应

2.#报错二:
[root@web01 ~]# rsync -avz /tmp/ rsync_backup@172.16.1.41::backup
sending incremental file list
rsync: failed to write xattr user.rsync.%stat for "." (in backup): Permission denied (13)
rsync: failed to set times on "." (in backup): Operation not permitted (1)
./

sent 176 bytes received 205 bytes 762.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]

#原因:
1)权限不足,服务端目录权限过高
2)selinux

3.#报错三:
[root@web01 ~]# rsync -avz /tmp/ rsync_back@172.16.1.41::backup
@ERROR: auth failed on module backup

#原因:
1)拟用户错误
2)码错误
3)码文件权限不是600
4)务端密码文件不存在

4.#报错四
[root@web01 ~]# rsync -avz /tmp/ rsync_backup@172.16.1.41::/backup
ERROR: The remote path must start with a module name not a /

#原因:
守护进程模式::后面跟的是模块名字,而不是目录名字

5.#报错五
[root@web01 ~]# rsync -avz /tmp/ rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]

#原因:
服务端服务没有启动

6.#报错六
[root@web01 ~]# rsync -avz /tmp/ rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]

#原因:
防火墙开启

7.#报错七
[root@web01 ~]# rsync -avz /tmp/ rsync_backup@172.16.1.41::backup
@ERROR: chdir failed

#原因:
服务端文件目录不存在

五、rsync命令选项

1.常用选项
-a #归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息

-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--partial #断点续传
--password-file=xxx #使用密码文件

2.限速演示
--bwlimit=100 #限速传输

[root@web01 /tmp]# rsync -avP --bwlimit 100 /tmp/ rsync_backup@172.16.1.41::backup
sending incremental file list
./
data.txt
5,537,792 1% 100.04kB/s

3.数据一致
--delete #让目标目录和源目录数据保持一致

#推:数据与推送数据的源数据一致
[root@web01 /tmp]# rsync -avP --delete /tmp/ rsync_backup@172.16.1.41::backup
sending incremental file list
deleting file2
deleting file1

sent 223 bytes received 43 bytes 532.00 bytes/sec
total size is 0 speedup is 0.00

#推:数据与拉取数据的源数据一致
[root@web01 /tmp]# rsync -a -v -P rsync_backup@172.16.1.41::backup /tmp --delete
receiving incremental file list
deleting file4
deleting file3
./

sent 32 bytes received 203 bytes 470.00 bytes/sec
total size is 0 speedup is 0.00

六、rsync备份案例

1.需求

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

2.准备服务器

主机 内网IP
web01 172.16.1.7
backup 172.16.1.41

3.客户端

1.创建备份目录
#备份目录格式
/backup/web01_172.16.1.31_2018-09-02

#取主机名
[root@web01 ~]# hostname
web01

#取IP
[root@web01 ~]# ifconfig eth1 | awk 'NR==2 {print $2}'
172.16.1.7
[root@web01 ~]# hostname -I | awk '{print $2}'
172.16.1.7

#取时间
[root@web01 ~]# date +%F
2020-08-12

#创建目录
[root@web01 ~]# mkdir -p /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`

2.打包
[root@web01 ~]# cd /backup/web01_172.16.1.7_2020-08-12/

[root@web01 /backup/web01_172.16.1.7_2020-08-12]# tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null

3.推送数据
[root@web01 ~]# rsync -avz /backup/web01_172.16.1.7_2020-08-12 rsync_backup@172.16.1.41::backup
sending incremental file list
web01_172.16.1.7_2020-08-12/
web01_172.16.1.7_2020-08-12/conf.tar.gz

sent 62,567 bytes received 47 bytes 125,228.00 bytes/sec
total size is 68,669 speedup is 1.10

4.以上内容写成脚本
[root@web01 ~]# mkdir /scripts
[root@web01 ~]# vim /scripts/backup.sh
#!/bin/bash
#0.定义变量
SRC=/backup
HOST=`hostname`
IP=`hostname -I | awk '{print $2}'`
DATE=`date +%F`
DIR=${SRC}/${HOST}_${IP}_${DATE}

#1.创建目录
mkdir -p $DIR

#2.进到目录下并打包文件
cd $DIR
tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null

#3.推送
export RSYNC_PASSWORD=123456
rsync -avz $DIR rsync_backup@172.16.1.41::backup

5.写入定时任务
[root@web01 ~]# crontab -e
#每天凌晨1点进行文件备份
00 01 * * * /bin/bash /scripts/backup.sh &> /dev/null

6.清理数据
#模拟生成一个月数据
[root@web01 ~]# for i in {1..30};do date -s 2020/08/$i;sh /scripts/backup.sh;done

#只保留七天的文件
[root@web01 ~]# find /backup/ -type d -mtime +7 | xargs rm -rf
[root@web01 ~]# ll /backup/
total 0
drwxr-xr-x 2 root root 25 Aug 23 00:00 web01_172.16.1.7_2020-08-23
drwxr-xr-x 2 root root 25 Aug 24 00:00 web01_172.16.1.7_2020-08-24
drwxr-xr-x 2 root root 25 Aug 25 00:00 web01_172.16.1.7_2020-08-25
drwxr-xr-x 2 root root 25 Aug 26 00:00 web01_172.16.1.7_2020-08-26
drwxr-xr-x 2 root root 25 Aug 27 00:00 web01_172.16.1.7_2020-08-27
drwxr-xr-x 2 root root 25 Aug 28 00:00 web01_172.16.1.7_2020-08-28
drwxr-xr-x 2 root root 25 Aug 29 00:00 web01_172.16.1.7_2020-08-29
drwxr-xr-x 2 root root 25 Aug 30 00:00 web01_172.16.1.7_2020-08-30

7.完善脚本
[root@web01 ~]# vim /scripts/backup.sh
#!/bin/bash
#0.定义变量
SRC=/backup
HOST=`hostname`
IP=`hostname -I | awk '{print $2}'`
DATE=`date +%F`
DIR=${SRC}/${HOST}_${IP}_${DATE}

#1.创建目录
mkdir -p $DIR

#2.进到目录下并打包文件
cd $DIR
tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null

#3.对文件生成验证文件
md5sum $DIR/conf.tar.gz > $DIR/auth.txt

#4.推送
export RSYNC_PASSWORD=123456
rsync -avz $DIR rsync_backup@172.16.1.41::backup

#5.清理数据
find $SRC -type d -mtime +7 | xargs rm -rf

4.服务端

1.安装邮件系统
[root@backup ~]# yum install -y mailx

#编辑邮件系统
[root@backup ~]# vim /etc/mail.rc
set from=qq号@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=qq号@qq.com
set smtp-auth-password=smtp验证码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

2.编写脚本

[root@backup ~]# vim /scripts/auth.sh
#!/bin/bash
#0.定义变量
SRC=/backup
HOST=`hostname`
IP=`hostname -I | awk '{print $2}'`
DATE=`date +%F`
DIR=${SRC}/${HOST}_${IP}_${DATE}

#1.验证文件的完整性
md5sum -c $SRC/web01_172.16.1.7_$DATE/auth.txt > $SRC/result.txt

#2.把验证结果发送到QQ
mail -s "备份数据完整性"   qq号码@qq.com < $SRC/result.txt

#3.清理数据
find $SRC -type d -mtime +180 | xargs rm -rf

七、rsync结合inotify实现实时备份

1.安装inotify
[root@web01 ~]# yum -y install inotify-tools

2.命令测试
[root@web01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup

3,参数详解
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载

4.实时监控脚本
1)粗糙版
[root@web01 /backup]# vim /scripts/rsync_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.41::backup --password-file=/etc/rsyncd.password >/dev/null 2>&1
done &

2)精华版
[root@web01 /backup]# vim /scripts/rsync_inotify.sh
#!/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
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 &

第三章 rsync 命令详解和实战用法的更多相关文章

  1. Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]

     Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...

  2. “全栈2019”Java第一百零三章:匿名内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. (转)Rsync命令详解

    Rsync命令详解 原文:http://blog.51cto.com/irow10/1826249 说明: Rsync是linux/Unix文件同步和传送工具.用于替代rcp的一个工具,rsync可以 ...

  4. (转)sudo配置文件/etc/sudoers详解及实战用法

    sudo配置文件/etc/sudoers详解及实战用法 原文:http://blog.csdn.net/field_yang/article/details/51547804 一.sudo执行命令的流 ...

  5. Linux rsync 命令详解

    服务器之间常常要保持些文件或目录的一致,比如一些大的软件下载网站,它们通常使用多台服务器来提供下载服务.当一台服务器上的文件更新后,其它的服务器 也需要更新,而且 在更新的时候应该是只对新增或是修改过 ...

  6. rsync命令详解、rsync用ssh隧道方式同步

    ● rsync格式安装命令 yum install -y rsync与scp的区别:scp复制为完全覆盖,rsync为增量同步,只同步修改过的数据.rsync命令格式如下: rsync 选项 源文件 ...

  7. [转]Docker(三):Dockerfile 命令详解

    本文转自:https://blog.csdn.net/ityouknow/article/details/79600406 上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dock ...

  8. Docker(三):Dockerfile 命令详解

    上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用. Dock ...

  9. rsync命令详解

    介绍 rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部 ...

随机推荐

  1. 第2课 - 搭建Lua开发环境

    第2课 - 搭建Lua开发环境 1. Lua 的优点 (1)Lua 使用标准的 ANSI C 进行开发,可以无缝集成到宿主程序,且几乎支持所有平台. (2)Lua 是开源且免费的软件,以源码的方式直接 ...

  2. yum管理——搭建iso镜像私有yum源仓库(1)

    在服务器上一般是没有光驱的,那么我们怎么制作iso本地repo镜像源仓库? 通过本地iso镜像,copy到linux系统中一个目录中,进行伪文件系统挂载,执行如下命令: 挂载:mount -o loo ...

  3. 关于弹性布局flex

    什么时候使用flex布局? 当页面排版涉及左右浮动.垂直居中等时,应使用flex布局来避免传统的盒式布局带来的一些Bug. 如何使用flex布局? 在目标元素的父元素设置csss属性.display: ...

  4. 更新Jenkins

    一般情况下,war的安装路径在/usr/share/jenkins目录下. 不过也有部分人不喜欢安装在这里,可以通过系统管理(System management)--> 系统信息(System ...

  5. Spring Cloud Alibaba生态探索:Dubbo、Nacos及Sentinel的完美结合

    @ 目录 背景 一.项目框架 1.1 采用IDEA和Maven多模块进行项目搭建 1.2 模块管理及版本管理 二.微服务公共接口 2.1 定义一个公共接口Api 2.2 pom.xml 2.3 Goo ...

  6. [BJDCTF 2nd]文件探测

    [BJDCTF 2nd]文件探测 这两天刷题碰到了一道稍微有难度的题,记录一下,有一些点是未被掌握到的. home.php: <?php setcookie("y1ng", ...

  7. 在Linux系统下搭建和配置一个minio文件服务器(二)

    上一篇主要讲述了在linux系统中搭建一个minio文件服务器,那么这一篇则用来整合java代码中使用,我之前自己已经搭建好了一个springboot项目,那么这一篇将详细讲述如何把minio整合进s ...

  8. 【记】《.net之美》之读书笔记(一) C#语言基础

    前言 工作之中,我们习惯了碰到任务就直接去实现其业务逻辑,但是C#真正的一些基础知识,在我们久而久之不去了解巩固的情况下,就会忽视掉.我深知自己正一步步走向只知用法却不知原理的深渊,所以工作之余,一直 ...

  9. Go 基本类型

    整形 标准整形 标准整形是按长度进行分类的,其中uint8为byte型,int16为C语言中的short型,int64为C语言中的long类型. 类型 描述 uint8 无符号 8位整型 (0 到 2 ...

  10. .NET 是信息技术应用创新产业重要参与者

    今天是国庆节,也是中秋节,月满中秋,举国欢庆,在这里祝各位开发者中秋国庆快乐. 放假在家就想把这几年对于.NET发展相关生态做个梳理,写一篇文章来总结一下这两年从腾讯出来自己创业,推动.NET在国内的 ...