inotify概述:
Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。

查看是否支持inotify,从kernel 2.6.13开始正式并入内核。
[root@ServerRsync ~]# uname -r
3.10.0-862.el7.x86_64

安装上传下载工具
[root@ServerRsync ~]# yum -y install lrzsz

rz 上载
sz 下载

使用编译安装
inotify-tools-3.13.tar.gz

安装inotify软件
tar xf inotify-tools-3.13.tar.gz 解压软件包
进入解压文件
inotify-tools-3.13

[root@ServerRsync inotify-tools-3.13]# ./configure 检查安装环境

configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.没有安装gcc gcc-c++

安装gcc gcc-c++
[root@ServerRsync inotify-tools-3.13]# yum -y install gcc* gcc-c++

[root@ServerRsync inotify-tools-3.13]# make -j 4 #make编译,将源代码编译成二进制,可执行的文件
源码编译mysql或内核: make -j 4 快。

[root@ServerRsync inotify-tools-3.13]# make install # 安装

[root@ServerRsync inotify-tools-3.13]# inotifywait -h #帮助
常用参数:
-e 用来指定要监控哪些事件。
这些事件包括: create创建,move移动,delete删除,modify修改文件内容,attrib属性更改。
-m 表示持续监控
-r 表示递归整个目录
-q 表示简化输出信息。

[root@ServerRsync ~]# mkdir /backup/allen88
[root@ServerRsync ~]# echo aaa > /backup/aaa.txt
[root@ServerRsync ~]# rm -rf /backup/allen88

在另一个终端登录,在/backup/作,然后,回到原来的终端查看监控变化情况。
[root@ServerRsync inotify-tools-3.13]# inotifywait -mrq -e create,move,delete,modify /backup/

/backup/ CREATE,ISDIR allen88
/backup/allen88/ IGNORED
/backup/ DELETE,ISDIR allen88
/backup/ CREATE aaa.txt
/backup/ MODIFY aaa.txt
/backup/ CREATE passwd
/backup/ MODIFY passwd

注:使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。据此可以识别变动情况。

编写触发式同步脚本
思路: 只要使用inotifywait检测到事件时,自动执行rsync进行同步操作即可。

[root@ServerRsync ~]# cat a.sh
#!/bin/bash
inotifywait -mrq -e create,move,delete,modify /backup/ | while read a b c
do
rsync -azP --delete /backup/ [email protected]::backup --password-file=/etc/rsync.password
done
[root@ServerRsync ~]#

同步目录触发时时同步备份数据
使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步)_第1张图片

#######
在使用rsync同步主数据库到从数据库操作时,rsync报错

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

原因是有文件没有写的权限,导致备份数据库权限不够,两种解决办法:

1、将服务端rsyncd.conf配置文件的uid和gid分别修改成root,重载下,/etc/rc.d/init.d/xinetd reload,再次执行同步,同步成功

2、将需要同步的文件夹及下属文件赋予777权限(chmod -R 777 xxx),再次执行同步,同步成功

注意:如果使用第一种办法,那么在执行完同步后,为了安全,记得将uid和gid修改回来,或修改成nobody