公司最近window服务器各种磁盘告警,都是老机器了,一时半会也没有新机器来扩容,于是我就想把MySQL的每日全量文件备份到Linux新机器上(别问为啥是每日全量,历史问题);
查询了下方案,大致分为两类:
1、FTP/SSH等方式直接同步;服务端主动推送
2、通过第三方客户端同步,如本次使用的Rsync;客户端主动获取
由于我要实现的是备份,代表着我不仅仅要把数据同步到Linux上,还要把Windows上的数据给删除掉,SSH等方式需要在windows配置定时任务等,考虑到如果有意外发生可能导致数据被主动误删,所以采用了客户端主动获取的方式,使用第三方同步;
关于Rsync,它实现了不仅仅数据同步功能(两个不同主机之间数据的完全同步),还提供了差异化参数的同步设定,如A服务器同步B,若A文件>B,可实现差异化同步到B ;当A
第三方同步软件比较多,公认比较好的是Rsync,本次分享Rsync如何实现,以及注意事项;
上图就是实现原理,具体表现为:
1、Windows服务器上安装Rsync软件,官网下载即可,和常规Windows软件一样傻瓜式安装,指的注意的一点是:
在安装最后,会要求建立一个账户和密码,作为Rsync管理的账户,必须要设置的,不设置无法运行,所以建立一个账户就行了,对账户授予文件夹的权限(按需授权)。这里和后面的同步账户不一样,是两个不同的账户,后面会做对比;
2、Windows上安装完后对Rsync配置文件进行设置,使得之后Linux客户端的信息能够有正确校验;
3、Linux安装客户端,方法直接yum install就行了
4、Linux上安装完后需要新建一个密码文档,并且授予只能root用户使用的权限,(这部创建和授权是必须的,即使最后我们不经过账户校验也要创建这一步)
5、Linux客户端执行同步命令即可;
关于Windows服务端配置文件,单独拿出来说明:
#不验证用户密码
pid = 0
uid = 0
gid = 0
use chroot = false
strict modes = false
#指定ip链接,*代表不限制
hosts allow = *
#最大链接数
max connections = 5
#日志文件
pid file = rsyncd.pid
log file = rsyncd.log
#端口
port = 873
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
#备份信息说明,Linux客户端通过这个名字来找服务端数据信息,可以自定义,
#但最后客户端执行命令需要和#这个一致
#可以定义多个备份信息,让不同ip的机子同步不同的数据
[svndata]
#服务端数据存放位置
path = /cygdrive/d/mysqlbackup
#运行链接ip
hosts allow = *
#只读权限,若是打开则只能同步无法删除
read only = false
transfer logging = yes
list = no
lock file = rsyncd.lock
#数据同步校验账户,和Linux客户端进行数据同步的验证使用,当然可以不适用,由于我是在内网,所以没用
#auth users = jf_backup_sync
#同步校验账户的验证密码
#secrets file = /cygdrive/d/Setting/Rsync/rsync_db.ps
这里需要说明的是:数据同步账户和Windows服务端安装时新建的账户是不一样的;
可以理解是:windows安装的时候新建的账户是管理Rsync这个工具的,
而配置文件中的账户,是校验同步数据的;
所以:要想Rsync工具能够在同步完后删除掉服务端数据,需要给管理账户赋予windows所有权限,若是只同步数据,也要数据可读写权限,所以我们需要对管理账户授予windows权限,一般授予所有权限
同步账户的用户名密码和Linux客户端上的信息应该一致,因为Linux客户端不要求同步账户名,所以要保证的是Linux客户端上的密码要一致;
最后要实现每天自动同步备份,只需要Linux上写个shell脚本,再配置一个定时任务即可;具体安装方式可参考:
https://www.cnblogs.com/kevingrace/p/5972563.html
在Linux上启动可能会有很多报错,最好谷歌下Rsync具体参数意义;
实现服务端同步完后删除文件的参数是:--remove-source-files:
如:
rsync -av --progress --remove-source-files --port=873 172.16.**.**::svndata/* /data/win-backup
报错若是报错GID,UID等等,请按照相关报错进行设置=0,我在搭建的时候报错GID错误,百度上全都说UID=0,PID=0,实际上是要加一个GID=0,解决这个问题百度很久没找到,最后去谷歌查了官方文档找到GID报错解决方法;