数据库应用:rsync远程同步

目录

一、理论

1.rsync

2.rsync优缺点

3.rsync三种工作模式

4.rsync同步源服务器

3. 配置rsync下行同步(定时同步)

4.rsync实时同步(上行同步)

 5.配置rsync实时同步(上行同步)

6.使用rsync快速删除大量文件

7.inotify-tools 监控文件安装

二、实验

1.配置rsync下行同步(定时同步)

三、问题

1.rsync启动失败

2.常见错误

四、总结


一、理论

1.rsync

(1)概念

rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。

rsync 的官方站点的网址是 rsync.samba.org/,目前最新版本是 3.1.3,由 Wayne Davison 进行维护。作为一种最常用的文件备份工具,rsync 往往是 Linux 和 UNIX 系统默 认安装的基本组件之一。
(2)特点

支持拷贝特殊文件,如连接文件、设备等。

可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。

可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。

可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。

可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。

可以通过socket(进程方式)传输文件和数据(服务端和客户端)。

支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
 

2.rsync优缺点

(1)  优点

1)可以增量备份,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物);socket(daemon)需要加密传输,可以利用服务或ipsec服务。

2)可以限速进行数据的备份或恢复操作。

3)远程SHELL通道模式还可以加密(SSH)传输

4)支持匿名认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像

5)保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p

6)可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。(–exclude)
 

(2)缺点

1)大量小文件时进行同步备份,比对的时间较长,有时候会导致rsync进程停止运行或者进程挂起; 解决方法: a、打包后再同步; b、drbd(文件系统同步复制block)。

2)同步大文件,比如:10G这样的,有时也会出现问题,导致rsync进程中断,未完整同步前,是隐藏文件,但是会占用磁盘空间(ls -al查看)。直到同步完成后,将隐藏文件改成正常文件。而且,每中断一次,生成一个隐藏文件。
 

3.rsync三种工作模式

分别是:本地方式,远程方式,守护进程。

rsync参数 说明

-v, 		--verbose	详细模式输出
-a, 		--archive	归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-z, 		--compress	对备份的文件在传输时进行压缩处理
-P						显示进度
-r,			--recursive	对子目录以递归模式处理
-l, 		--links		保留软链结
-p, 		--perms		保持文件权限
-o, 		--owner		保持文件属主信息
-g, 		--group		保持文件属组信息
-D, 		--devices	保持设备文件信息
-t, 		--times		保持文件时间信息
-e, 		--rsh=command 指定使用rsh、ssh方式进行数据同步
-S, 		--sparse	对稀疏文件进行特殊处理以节省DST的空间
-n, 		--dry-run	现实哪些文件将被传输
-w, 		--whole-file 拷贝文件,不进行增量检测
-B, 		--block-size=SIZE	检验算法使用的块尺寸,默认是700字节。
-x, 		--one-file-system	不要跨越文件系统边界
-R, -		-relative	使用相对路径信息
-b, 		--backup	创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
-u, 		--update	仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件
-q, 		--quiet		精简输出模式
-c, 		--checksum	打开校验开关,强制对文件传输进行校验
--exclude=PATTERN		指定排除不需要传输的文件模式
--exclude-from=FILE		排除FILE中指定模式的文件
--bwlimit=KBPS			限制I/O带宽,KBytes per second
--delete				删除那些DST中SRC没有的文件
--password-file=FILE	从FILE中得到密码

4.rsync同步源服务器

(1)原理

在远程同步任务中,负责发起 rsync 同步操作的客户机称为发起端,而负责响应来自客户机的 rsync 同步操作的服务器称为同步源。

① 在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限。
② 在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限。

数据库应用:rsync远程同步_第1张图片

3. 配置rsync下行同步(定时同步)

(1)环境

源服务器:192.168.204.46

客户机(发起端):192.168.204.45

(2)配置源服务器

第一张方式

① 配置rsync源服务器(192.168.204.46)
rpm -q rsync							#一般系统已默认安装rsync

#建立/etc/rsyncd.conf 配置文件
vim /etc/rsyncd.conf				#添加以下配置项
uid = root
gid = root
use chroot = yes										#禁锢在源目录
address = 192.168.10.18								    #监听地址
port 873												#监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log							#日志文件位置
pid file = /var/run/rsyncd.pid							#存放进程 ID 的文件位置
hosts allow = 192.168.204.0/24							#允许访问的客户机地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z		#同步时不再压缩的文件类型

[wwwroot]												#共享模块名称
path = /var/www/html									#源目录的实际路径
comment = Document Root of www.david.com
read only = yes											#是否为只读
auth users = backuper									#授权账户,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db						#存放账户信息的数据文件

#如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。
#为备份账户创建数据文件
vim /etc/rsyncd_users.db
backuper:123456				#无须建立同名系统用户

chmod 600 /etc/rsyncd_users.db

#保证所有用户对源目录/var/www/html 都有读取权限
chmod +r /var/www/html/
ls -ld /var/www/html/

#启动 rsync 服务程序
rsync --daemon				#启动 rsync 服务,以独立监听服务的方式(守护进程)运行 

netstat -anpt | grep rsync

#关闭 rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid


第二种方式

systemctl stop firewalld
setenforce 0
 ​
 rpm -q rsync      #一般系统已默认安装rsync
 ​
#建立/etc/rsyncd.conf配置文件
vim /etc/rsyncd.conf
cat /etc/rsyncd.conf #注意:配置文件中,行后不要有注释和空格。
##全局配置			
uid = root    #用户			
gid = root    #用户组			
use chroot = no    #安全相关			
max connections = 200    #最大链接数			
timeout = 300    #超时时间			
pid file = /var/run/rsyncd.pid    #进程对应的进程号文件			
lock file = /var/run/rsync.lock    #锁文件			
log file = /var/log/rsyncd.log    #日志文件,显示出错信息
##模块配置			
[backup]            #模块名称			
path = /data      #模块对应的位置(路径)			
ignore errors       #忽略错误程序			
read only = false    #是否只读			
list = false        #是否可以列表			
hosts allow = 192.168.204.0/24  #准许访问rsync服务器的客户范围			
#hosts deny = 0.0.0.0/32      #禁止访问rsync服务器的客户范围			
auth users = rsync_backup    #不存在的用户;只用于认证			
secrets file = /etc/rsync.password  #设置进行连接认证的密匙文件

 ​
 #关闭rsync 服务
 kill $(cat /var/run/rsyncd.pid) 
 rm -rf /var/run/rsyncd.pid


#创建rsync备份目录/授权rsync用户管理备份目录,修改备份目录权限
mkdir -p /data
useradd rsync -s /sbin/nologin -M #创建一个rsync的虚拟用户,只被程序使用
chown -R rsync.rsync /data/

#创建认证用户密码文件,修改文件权限
echo "rsync_backup:123456" >/etc/rsync.password
chmod 600 /etc/rsync.password

#重启rsync守护进程服务,并查看是否启动
systemctl enable rsyncd.service 
systemctl restart rsyncd.service
ps -ef|grep rsync

#启动文件
cat /usr/lib/systemd/system/rsyncd.service
[Unit]
Description=fast remote file copy program daemon
  nditionPathExists=/etc/rsyncd.conf

[Service]
EnvironmentFile=/etc/sysconfig/rsyncd
ExecStart=/usr/bin/rsync --daemon --no-detach "$OPTIONS"

[Install]
WantedBy=multi-user.target

(3) 发起端配置

基本格式

rsync  [选项]  原始位置  目标位置

常用选项

数据库应用:rsync远程同步_第2张图片

③配置

#将指定的资源下载到本地/opt 目录下进行备份。
格式一:
rsync -avz [email protected]::wwwroot /opt/					#密码123456

格式二:
rsync -avz rsync://[email protected]/wwwroot /opt/

#免交互格式配置:
echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass

crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/
#为了在同步过程中不用输入密码,需要创建一个密码文件,保存 backuper 用户的密码,如 /etc/server.pass。在执行 rsync 同步时使用选项 “--password-file=/etc/server.pass” 指定即可。

systemctl restart crond
systemctl enable crond

4.rsync实时同步(上行同步)

(1)定期同步的不足

① 执行备份的时间固定,延迟明显、实时性差
② 当同步源长期不变化时,密集的定期任务是不必要的
(2)实时同步的优点
一旦同步源出现变化,立即启动备份
只要同步源无变化,则不执行备份
(3) Linux内核的inotify机制
从版本2.6.13开始提供
可以监控文件系统的变动情况,并做出通知响应
辅助软件:inotify-tools
(4) 发起端配置rsync+Inotify
使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。
因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。

数据库应用:rsync远程同步_第3张图片

 5.配置rsync实时同步(上行同步)

发起端需要配置 rsync+Inotify。

(1)创建rsync备份目录/授权rsync用户管理备份目录,修改备份目录权限

mkdir -p /data

#创建一个rsync的虚拟用户,只被程序使用
useradd rsync -s /sbin/nologin -M 
chown -R rsync.rsync /data/

(2)发起端,调整 inotify 内核参数
在Linux内核中,默认的inotify机制提供了三个调控参数:

① max_queue_events ( 监控事件队列,默认值为16384)、
② max_user_instances (最多监控实例数,默认值为128)、
③ max_user_watches (每个实例最多监控文件数,默认值为8192)。
当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。

cat /proc/sys/fs/inotify/max_queued_events
 cat /proc/sys/fs/inotify/max_user_instances
 cat /proc/sys/fs/inotify/max_user_watches
 ​
 vim /etc/sysctl.conf    #内核参数都在该文件中修改
 fs.inotify.max_queued_events = 16384
 fs.inotify.max_user_instances = 1024
 fs.inotify.max_user_watches = 1048576
 ​
 sysctl -p

(3)发起端,安装 inotify-tools
用inotify 机制还需要安装inotify-tools, 以便提供inotifywait、 inotifywatch 辅助工具程序,用来监控、汇总改动情况。

inotifywait:可监控modify (修改)、create (创建)、move (移动)、delete (删除)、attrib ( 属性更改)等各种事件,一有变动立即输出结果。
inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。
 

 tar zxvf inotify-tools-3.14.tar.gz -C /opt/
 ​
 cd /opt/inotify-tools-3.14
 ./configure
 make && make install
 ​
 #可以先执行“inotifywait”命令,然后另外再开启一个新终端向 /data 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。
 inotifywait -mrq -e modify,create,move,delete /data
 ​
 #选项“-e”:用来指定要监控哪些事件
 #选项“-m”:表示持续监控
 #选项“-r”:表示递归整个目录
 #选项“-q”:简化输出信息

(4)发起端,编写触发式同步脚本

在另外一个终端编写触发式同步脚本(注意,脚本名不可包含 rsync 字符串,否则脚本可能不生效)。

 vim /opt/inotify.sh 
 #!/bin/bash
 ​
 #定义inotifywait监控/data目录中文件事件的变量。attrib表示属性变化。
 INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /data"
 ​
 #定义执行 rysnc 上行同步的变量。--delete保证两边目录内容一致,可以不加。
 RSYNC_CMD="rsynC -azH --delete --password-file=/etc/server .pass /data [email protected]::backupdir/"
 ​
 #使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
 $INOTIFY_CMD | while read DIRECTORY EVENT FILE 
 do
    #如果rsync未在执行,则立即启动
    if[ $(pgrep rsync | wc -l) -le 0 ];then
         $RSYNC_CMD
    fi
 done
 ​
 chmod +8 /opt/inotify.sh
 ​
 chmod +x /etc/rc.d/rc.local     #开机自启脚本文件
 echo '/opt/inotify.sh' >> /etc/rc.d/rc.local  #加入开机自动执行
 ​
 #之后运行脚本(后台运行)
 cd /opt/
 ./inotify.sh &
 ​
 #之后在发起端创建文件,查看源服务器中是否新增了

如果同步的文件比较大,同步时比较慢导致后面文件没来的及同步,则需要在脚本内添加消息队列或缓冲

 #!/bin/bash
 #定义inotifywait监控目录中文件事件的变量
 INOTIEY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /data/"
 #定义执行rsync上行同步的变量
 RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /data/ [email protected]::backupdir"
 #使用while、read持续获取监控结果,根据结果可以进一步判断是否读取到输出的监控记录
 $INOTIEY_CMD | while read DIRECTORY EVENT FILE
 do    
       #小于等于0,则等待它执行完再去同步其他文件
       until [ $(pgrep rsync | wc -l) -le 0 ] 
      
       do
          sleep 1
       done
       $RSYNC_CMD
 done

(5)验证同步效果
上述脚本用来检测本机/data目录的变动情况,一旦有更新触发rsync 同步操作,上传备份至服务器192.168.204.246 的data共享目录下。

触发式上行同步的验证过程如下:

① 在本机运行/opt/inotify.sh 脚本程序.

② 切换到本机的 /data/ 目录,执行增加、删除、修改文件等操作。

③ 查看远端服务器中的data目录下的变化情况。

6.使用rsync快速删除大量文件

(1)场景

假如要在linux下删除大量文件,比如100万、1000万,像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf * 可能就不好用了,因为要等待很长一段时间。

在这种情况下我们可以使用rsync来巧妙处理。

(2)原理

rsync实际用的是替换原理。
 

 #先建立一个空的文件夹:
 mkdir /home/blank
 ​
 #用rsync删除目标目录:
 rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp
 
 #这样目标目录很快就被清空了

(3)选项说明

数据库应用:rsync远程同步_第4张图片

7.inotify-tools 监控文件安装

(1)概念

inotify-tools 是一个用C语言库,一个为Linux提供简单inotify接口的命令行程序。这些程序可以用于监视文件系统事件并执行相应操作。这些程序是用C语言来写的,除了需要Linux内核的inotify支持外,没有其他的依赖。inotify-tools 3.14是目前最新版本,其于2010年3月7日发布。

inotify,它是Linux在内核 2.6.13 (June 18, 2005)版本中引入的一个新功能,它为用户态监视文件系统的变化提供了强大的支持,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。

(2)inotify安装

inotify支持检测

只有在内核 2.6.13 (June 18, 2005)以上的Linux版本中才支持inotify-tools。

查看当前系统是否支持inotify, 可用通过 uname -a 查看你的内核版本

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost ~]# cat /proc/version
Linux version 3.10.0-693.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017

或者查看/proc/sys/fs/inotify/,如果看到显示 max_queued_events max_user_instances max_user_watches 则说明支持inotify

[root@localhost ~]# ls /proc/sys/fs/inotify/
max_queued_events  max_user_instances  max_user_watches

(3)inotify-tools安装

wget --no-check-certificate https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install

(4)inotify-tools 工具包中包含了两个命令

①  inotifywait

1)概念

inotifywait 仅执行阻塞,等待 inotify 事件,你可以使用它来监控任何一组文件和目录,或监控整个目录树(目录、子目录、子目录的子目录等等),并且可以结合 shell 脚本,更好的使用 inotifywait。

2)命令格式

inotifywait [-hcmrq] [-e ] [-t ] [--format ] [--timefmt ] [ ... ]

3)选项参数

-h|--help     	显示帮助信息
@       	排除不需要监视的文件,可以是相对路径,也可以是绝对路径
--exclude 
                正则匹配需要排除的文件,大小写敏感
--excludei 
                正则匹配需要排除的文件,忽略大小写。
-m|--monitor  	接收到一个事情而不退出,无限期地执行。默认行为是接收到一个事情后立即退出
-d|--daemon   	跟--monitor一样,除了是在后台运行,需要指定--outfile把事情输出到一个文件。也意味着使用了--syslog
-r|--recursive	监视一个目录下的所有子目录
--fromfile 
                从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头
-o|--outfile 
                输出事件到文件.
-s|--syslog   	输出错误信息到系统日志
-q|--quiet    	不输出详细信息,只输出事件
-qq           	除了致命错误,不会输出任何信息
--timefmt 	指定时间格式,用于�format选项中的%T格式
-c|--csv      	输出csv格式。
-t|--timeout 
                设置超时时间,如果为0,则无限期地执行下去。
-e|--event  [ -e|--event  ... ]
                指定监听的时间,如果省略,则侦听所有事件。
--format 	指定输出格式
     %w 表示发生事件的目录
     %f 表示发生事件的文件
     %e 表示发生的事件
     %Xe 事件以“X”分隔
     %T 使用由--timefmt定义的时间格式

3)可监听的事件

access		    文件或者目录被读
modify		    文件或目录被写入
attrib		    文件或者目录属性被更改
close_write	  文件或目录关闭,在写模式下打开后
close_nowrite	文件或目录关闭,在只读模式打开后
close		      文件或目录关闭,而不管是读/写模式
open		      文件或目录被打开
moved_to	    文件或者目录移动到监视目录
moved_from	  文件或者目录移出监视目录
move		      文件或目录移出或者移入目录
create		    文件或目录被创建在监视目录
delete		    文件或者目录被删除在监视目录
delete_self	  文件或目录移除,之后不再监听此文件或目录
unmount		    文件系统取消挂载,之后不再监听此文件系统

示例1、监控/data目录

inotifywait -rmq /data

们在另一个终端中想该目录中写入一个文件

echo "test" >> /data/newfile

就会在前一个终端中看到如下信息

# inotifywait -rmq /data
/data/ CREATE newfile
/data/ OPEN newfile
/data/ MODIFY newfile
/data/ CLOSE_WRITE,CLOSE newfile

上所示,我们监控的了对于newfile文件的 CREATE、OPEN、MODIFY、CLOSE_WRITE、CLOSE等事件。

示例2、实时监控对/etc/passwd 文件的修改、删除和权限相关时间,并且按照指定格式输出。

# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f %e' --event modify,delete,attrib  /etc/passwd

在另一终端创建一个新用户

# useradd testuser

时在前一个终端中就会监控到一个ATTRIB 事件

# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f %e' --event modify,delete,attrib  /etc/passwd
29/10/16 16:59 /etc/passwd ATTRIB

示例3、实现对 /data/web 目录进行监控,监控文件删除,修改,创建和权限相关事件,并且要求将监控信息写入/var/log/web_watch.log。要求日志条目要清晰明了,能突显文件路径、事件名和时间。

# cat web_watch.sh
#!/bin/bash
inotifywait -mrq --timefmt '%y/%m/%d %H:%M' --format  '%T %w%f %e' --event delete,modify,create,attrib  /data/web | while read  date time file event
  do
      case $event in
          MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
                  echo $event'-'$file'-'$date'-'$time >> /var/log/web_watch.log
              ;;
 
          MOVED_FROM|MOVED_FROM,ISDIR|DELETE|DELETE,ISDIR)
                  echo $event'-'$file'-'$date'-'$time /var/log/web_watch.log
              ;;
      esac
  done

行脚本后,在另一个终端操作后,查看/var/log/web_watch.log日志

# cat /var/log/web_watch.log
CREATE-/data/web/a-14/06/27-16:21
CREATE-/data/web/aa-14/06/27-16:21
CREATE-/data/web/aaaa-14/06/27-16:24
CREATE-/data/web/aaaaa-14/06/27-16:24

②  inotifywatch

1)概念

inotifywatch 用来收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。

2)命令格式

inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]

3)选项参数

-h|--help    	            显示帮助信息
-v|--verbose 	            详细信息
@       	          排除不需要监视的文件,可以是相对路径,也可以是绝对路径
--fromfile          从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头
--exclude        正则匹配需要排除的文件,大小写敏感
--excludei       正则匹配需要排除的文件,忽略大小写。
-z|--zero                 输出表格的行和列,即使元素为空
-r|--recursive	          监视一个目录下的所有子目录
-t|--timeout 
                          设置超时时间,如果为0,则无限期地执行下去。
-e|--event  [ -e|--event  ... ]
                          指定监听的时间,如果省略,则侦听所有事件。
-a|--ascending     以指定事件升序排列
-d|--descending    以指定事件降序排列

示例1、统计/data目录所在文件系统发生的事件次数

inotifywatch -v -e create,modify,delete -t 30 -r /data

然后在另一终端中进行一些操作

# echo "test" >> /data/newfile1
...
# rm /data/newfile
rm:是否删除普通文件 "/data/newfile"?y
# rm /data/newfile1
rm:是否删除普通文件 "/data/newfile1"?y

30秒后,前一个终端会生成如下报告

# inotifywatch -v -e create,modify,delete -t 30 -r /data
Establishing watches...
Setting up watch(es) on /data
OK, /data is now being watched.
Total of 1 watches.
Finished establishing watches, now collecting statistics.
Will listen for events for 30 seconds.
total  modify  create  delete  filename
11     8       1       2       /data/

二、实验

1.配置rsync下行同步(定时同步)

(1)环境

源服务器:192.168.204.46

客户机(发起端):192.168.204.45

(2)配置源服务器(第一种方式)

 数据库应用:rsync远程同步_第5张图片

为备份账户创建数据文件

 

 

 

(3)配置源服务器(第二种方式)

① 关闭防火墙

一般系统已默认安装rsync

③ 建立/etc/rsyncd.conf配置文件

数据库应用:rsync远程同步_第6张图片

 创建rsync备份目录/授权rsync用户管理备份目录,修改备份目录权限

 创建认证用户密码文件,修改文件权限

 重启rsync守护进程服务,并查看是否启动数据库应用:rsync远程同步_第7张图片

  启动文件

数据库应用:rsync远程同步_第8张图片

(4)发起端配置(第一种方式)

免交互配置

 

数据库应用:rsync远程同步_第9张图片

服务端新建文件

 

 客户端查看

 

 

(5)发起端配置(第二种方式)

①关闭防火墙

 创建密码文件,客户端密码文件中,只需要密码即可,密码文件的权限是600

 在客户端测试推送文件

  数据库应用:rsync远程同步_第10张图片

在源服务器上查看是否推送成功

 客户端在服务端拉取文件数据库应用:rsync远程同步_第11张图片

 在客户端查看

数据库应用:rsync远程同步_第12张图片

 (5)发起端,调整 inotify 内核参数

默认的inotify机制提供了三个调控参数

数据库应用:rsync远程同步_第13张图片

  当要监控的目录、文件数量较多或者变化较频繁时,需要加大这三个参数的值。

数据库应用:rsync远程同步_第14张图片

 发起端安装 inotify-tools

 ⑤ 编译安装

 

⑥ inotifywait测试

 数据库应用:rsync远程同步_第15张图片

数据库应用:rsync远程同步_第16张图片

(6)客户端触发式同步脚本

数据库应用:rsync远程同步_第17张图片

 

 客户端

数据库应用:rsync远程同步_第18张图片

 服务端

 

三、问题

1.rsync启动失败

(1)问题

(2)原因分析

缺少pid文件

(3)解决方法

检查配置文件,发现路径错误

修改

2.模块未授权

  (1)   报错

 (2)原因分析

账户数据文件与配置文件里的路径不符

(3)解决方法

数据库应用:rsync远程同步_第19张图片

 修改

数据库应用:rsync远程同步_第20张图片

3. 连接失败

(1)报错

(2)原因分析

未关闭所有安全机制及防火墙

(3)关闭服务

systemctl stop firewalld

setenforce 0

systemctl disable firewalld

 (4)添加ssh

数据库应用:rsync远程同步_第21张图片

4.常见错误

(1)错误一

@ERROR: auth failed on module backup
rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
说明:这是因为密码设置错了,无法登入成功,检查一下rsync.pwd,看客服是否匹配。还有服务器端没启动rsync 服务也会出现这种情况。

(2)错误二

password file must not be other-accessible
continuing without password file
Password:
说明:这是因为rsyncd.pwd rsyncd.sec的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd

(3)错误三

@ERROR: chroot failed
rsync: connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
说明:这是因为你在 rsync.conf 中设置的 path 路径不存在,要新建目录才能开启同步

(4)错误四

rsync: failed to connect to 218.107.243.2: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
说明:防火墙问题导致,这个最好先彻底关闭防火墙,排错的基本法就是这样,无论是S还是C,还有ignore errors选项问题也会导致

(5)错误五

@ERROR: access denied to www from unknown (192.168.1.123)
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(359)
说明:此问题很明显,是配置选项host allow的问题,初学者喜欢一个允许段做成一个配置,然后模块又是同一个,致使导致

(6)错误六

rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(244) [generator=2.6.9]
rsync error: received SIGUSR1 (code 19) at main.c(1182) [receiver=2.6.9]
说明:导致此问题多半是服务端服务没有被正常启动,到服务器上去查查服务是否有启动,然后查看下 /var/run/rsync.pid 文件是否存在,最干脆的方法是杀死已经启动了服务,然后再次启动服务或者让脚本加入系统启动服务级别然后shutdown -r now服务器

(7)错误七

rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(604) [sender=2.6.9]
说明:原数据目录里没有数据存在

(8)错误八

@ERROR: auth failed on module bachup
 rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:服务器端该模块(backup)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。  提供正确的用户名密码解决此问题

四、总结

rsync - 快速,通用,可实现全量和增量的远程(和本地)文件复制工具。

rsync监听端口:873

rsync运行模式:C/S

client/server :客户端/服务端

在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限。
在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限。

rsync配置文件

vim /etc/rsyncd.conf

启动rsync服务程序

#启动rsync服务程序
 rsync --daemon 
    
#启动rsync 服务,以独立监听服务的方式(守护进程)运行
 netstat -anpt | grep rsync

关闭rsync 服务

kill $(cat /var/run/rsyncd.pid) 

rm -rf /var/run/rsyncd.pid

crontab设置

#编辑
crontab -e

#查看
crontab -l

#重启
systemctl restart crond
systemctl enable crond

检查执行脚本

#执行脚本
sh -x inotify.sh

开机自启脚本

#设置开机自启动
chmod +x /etc/rc.d/rc.local 
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local 

你可能感兴趣的:(数据库)