Rsync+Inotify操作文档
生产环境和QA环境中的数据库服务器操作系统为centos,需要使用Rsync+Inotify模式来将生产环境中的mysql备份文件传输到QA环境中,然后在QA环境中进行还原。
实现目标如下所示:
源服务器:10.228.1.145
目标服务器:192.168.106.66
目的:在源服务器上将mysql定期备份的文件实时同步到目标服务器目录下进行还原
Rsync+Inotify 实现原理:
源服务器和目标服务器都需要安装Rsync,Inotify只在源服务器上安装
源机器上的Inotify实时监控主机上的某个目录,如果发现目录中有增删改的操作就把相应文件使用Rsync推送到目标端服务器上。
具体安装步骤如下:
1)Rsync安装配置
Rsync软件linux系统自带,只需要配置即可。
检查rsync是否已安装:
#rpm –qa | grep rsync
- 目标服务器192.168.106.66 rsync安装配置
1、在/usr/local目录下新建mysqlbak目录。
2、在/etc目录下新建rsyncd.conf文件,内容如下:
uid = root
gid = root
use chroot = no
max connections = 5
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[bak]
path=/usr/local/mysqlbak
comment = update
ignore errors
read only = no
list = no
auth users = root
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
3、在/etc目录下新建rsyncd.secrets文件,内容如下:
root:gta@2014 #此处为操作系统账号密码
4、修改/etc/rsyncd.secrets权限:
#chmod 600 /etc/rsyncd.secrets
至此目标服务器192.168.106.66 rsync安装配置完成
启动rsync:
rsync --daemon --config=/etc/rsyncd.conf
查看rsync端口是否已开启:
netstat -nutlp | grep :873
- 源服务器10.228.1.145 rsync安装配置
源服务器配置rsync非常简单:
1、在/etc目录下新建rsyncd.secrets文件,内容如下:
gta@2014 #此处为操作系统密码
2、修改/etc/rsyncd.secrets权限:
#chmod 600 /etc/rsyncd.secrets
至此源服务器10.228.1.145 rsync安装配置完成
2)Inotify安装配置
Inotify只需要在源服务器10.228.1.145上安装配置
1、在安装之前需要查看服务器内核是否支持inotify:
ll /proc/sys/fs/inotify #列出文件目录,出现下面的内容,说明服务器内核支持inotify
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_queued_events
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_instances
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_watches
备注:Linux下支持inotify的内核最小为2.6.13,可以输入命令:uname -a查看内核
2、安装inotify-tools
yum install make gcc gcc-c++ #安装编译工具
上传inotify-tools-3.14.tar.gz到/usr/local/目录下
cd /usr/local/
tar zxvf inotify-tools-3.14.tar.gz #解压
cd inotify-tools-3.14 #进入解压目录
./configure #配置
make #编译
make install #安装
3、创建配置文件
在/usr/local目录下新建mysqlbak目录
在/usr/local目录下新建inotify.sh文件,输入以下内容:
#!/bin/bash
src=/usr/local/mysqlbak
des=bak
hostip=10.222.11.43
cd ${src}
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%e %w%f %T' -e create ./ | while read file
do
INO_EVENT=$(echo $file | awk '{print $1}')
INO_FILE=$(echo $file | awk '{print $2}')
echo "-------------------------------$(date)------------------------------------"
echo $file
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] ||
[[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] ||
[[ $INO_EVENT =~ 'ATTRIB' ]]
then
echo $INO_EVENT
rsync -avzcR --password-file=/etc/rsyncd.secrets $(dirname ${INO_FILE}) root@$hostip::$des
fi
if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
then
echo $INO_EVENT
rsync -avzR --delete --password-file=/etc/rsyncd.secrets $(dirname ${INO_FILE}) root@$hostip::$des
fi
done
脚本创建完成后,即可启动脚本:
nohup sh inotify.sh &
此时在/usr/local/mysqlbak目录中生成的文件即可传到到目标端中目录中。
更多详细的功能可以参考:https://www.cnblogs.com/f-ck-need-u/p/7220009.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!