rsync+inotify实现数据库网络实时备份
rsync作为一个单向的备份神器,效率超高,实乃网络备份中的神器。不过,配inotify更强悍哦。inotify是什么东西?实时对比文件之间的差异,并发出通知等事物,从而进行同步的一个软件。在Linux中的yum 就使用了inotify,只是是基于Python的 python-inotify这个软件。rsync和inotify结合,就可以实现自动的实时的稳定备份,数据库也是由一个个文件组成,因此实时的备份数据库是一个不错的选择。
该实验由两台主机构成,一台主机作为rsync的服务器,需要备份的数据库就安装在此主机上。另一台作为数据备份的接受方,只是存储备份的内容。当然了,如果在第二台主机也安装数据库,并将备份指向所安装数据库的数据库位置,那么,也是变相的一个主从复制。第一台主机 IP地址为192.168.0.16,第二台主机地址为192.168.0.17。下面讲解详细配置步骤。
第一台主机的配置:
安装mysql,安装方式不限定,版本不限定,我是使用的二进制安装,版本为mysql-5.7.19,安装后的目录为 /usr/local/mysql。数据库目录为 /usr/local/mysql/data 并且数据库远程连接权限开放。
执行命令:
yum install https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/i/inotify-tools-3.14-9.el7.x86_64.rpm -y
yum install https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/i/inotify-tools-devel-3.14-9.el7.x86_64.rpm -y
yum install rsync -y
yum 安装inotify和rsync,注意一点,inotify-tools和inotify-tools-devel是依赖关系,前者先安装。
编辑一个脚本,该脚本生成 rsync的主配置文件。脚本内容如下:
name=`route -n |awk -F ' ' 'NR==3 {print($8)}'`
ip=`ifconfig $name|grep netmask|awk '{print $2}'`
echo "address = $ip
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[mysql_data]
comment = web directory backup
path = /usr/local/mysql/data
read only = no
dont compress = *.gz *.bz2
auth users = zsk
secrets file = /etc/rsyncd_users.db">/etc/rsyncd.conf
编辑第二个脚本,该脚本功能为启动rsync服务和inotify服务。脚本内容如下:
echo "a=\"inotifywait -mrq -e create,delete /usr/local/mysql/data\"
b=\"rsync -avz /filesrc/* root@\192.168.0.17:/filedes\"
\$a | while read directory event file
do
\$b
done " >/root/rsync.sh
第二台主机的配置:
执行命令:yum install rsync -y &&mkdir /filedes,配置两台主机的ssh免密登录 ,两个主机的防火墙和selinux都关闭。
回到第一个主机,分别执行第一个和第二个脚本
这时候,如果一切正常,在第一台主机操作数据库,比如新建一个数据库,在第二台主机的 /filedes 目录下回看到所有的数据库文件。