前几天使用ssh在两台windows服务器之间进行数据库备份,但是首先ssh一般是全量备份(虽然局域网内速度还是很快,50m/s)但是还是很不方便,还要在客户端写个定时删除的脚本。再者就是我在windows使用ssh时对免密输入死活搞不了,公钥一直无法识别。最后用下策vbs写了个脚本实现了模拟输入密码。但是问题又双叒叕出来了。。。因为服务器几分钟没用就自动锁定了,锁定状态下vbs是无法模拟输入的。。。我真的。。。
所以就有了这篇文章,使用CwRsync对其进行数据库备份
目录
1.下载CwRsync
- cwRsync 客户端: http://soft.huweishen.com/soft/307.html
- cwRsync 服务器端: http://soft.huweishen.com/soft/308.html
2.安装CwRsync
2.1安装CwRsync服务器端
还是提一嘴,服务器端就是提供需要备份文件的那端
基本上无脑next下一步就行,但是得注意在这个界面时
此时一定要输入你这台电脑存在的用户名和密码,否则就安装失败,不会注册RsyncServer服务,得重来 !!!
2.1.1配置服务器端的配置文件
编辑你安装目录下的 rsyncd.conf 文件如下
use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
pid file = rsyncd.pid
port = 873
uid = 0
gid = 0
max connections = 10
# Module definitions
# Remember cygwin naming conventions : c:work becomes /cygwin/c/work
[SVN]
path = /cygdrive/d/project-energy-new/mongodb_backup
read only = false
transfer logging = yes
ignore errors
list = no
hosts allow = 192.168.1.5
hosts deny = *
lock file = rsyncd.lock
strict modes = no
auth users = NYJAdmin
secrets file = /cygdrive/d/newRsyncServer/ICW/rsync.password
附注解版:
use chroot = false #不使用chroot
strict modes = false #静态模式
hosts allow = * #所有IP均可
log file = rsyncd.log #log文件名,可以指定路径
pid file = rsyncd.pid #pid文件名,可以指定路径
port = 8173 #默认端口873
uid = 0 #不指定uid,不加这一行将无法使用任何账户
gid = 0 #不指定gid
max connections = 10 #最大连接数10
# Module definitions
# Remember cygwin naming conventions : c:work becomes /cygwin/c/work
[SVN] #模块名称,后面运行时需指定
path = /cygdrive/d/project-energy-new/mongodb_backup #你需要备份文件的路径
read only = false #只读
transfer logging = yes #记录传输日志
ignore errors #忽略无关的IO错误
list = no #不列文件表
hosts allow = 192.168.1.5 #允许访问的ip地址,多个不知道是,还是/请自行尝试
hosts deny = * #不允许hosts allow以外的任何IP访问
lock file = rsyncd.lock #避免@ERROR: failed to open lock file出现
strict modes = no #关闭严格校验模式
auth users = NYJAdmin #需要校验的用户名,就是你之前安装时输入的用户名
secrets file = /cygdrive/d/newRsyncServer/ICW/rsync.password #密码校验文件的存放位置,也是你之前安装时输入的密码
ps:
- 如果你从其他地方拷贝的配置文件,切记把每行末尾的 #注释信息给删了。。。不删会导致校验密码失败,我真的会谢,这玩意儿卡了我一天。。。我是新手,我太菜了。。。
- 所有关于写路径的,例如 /cygdrive/d/project-energy-new/mongodb_backup 表示 D:\\project-energy-new/mongodb_backup,/cygdrive前缀是必加的,不要耍聪明自个儿删了
2.1.2创建用户名密码文件
新建一个文本文档(txt),在里面输入你在创建时的用户名密码 键值对,像这样
NYJAdmin:123456
然后修改这个文本文档的名称如下(包含文件类型后缀)
rsync.password
最后长这样:
然后将这个文件,放到你在 rsyncd.conf 中 secrets file 这行指定的位置即可
2.1.3配置用户名密码文件相关权限
避免后续密码校验出现各种各样的问题,需配置用户名密码文件的相关权限。在你安装CwRsync地方的bin目录下,文件目录处键入cmd。或者你一路cd也行
然后分别键入以下命令
chmod -c 600 /cygdrive/d/cwRsync/rsync.password
chown NYJAdmin /cygdrive/d/cwRsync/rsync.password
ps:
- 你用户名密码文件放哪就将 /cygdrive/d/cwRsync/rsync.password 这段代码改成哪,写法跟配置文件的一样
- 第二段代码是设置文件拥有者权限,你用的哪个系统用户来校验(也就是你 rsync.password 文件里写的用户名)就填哪个
2.1.4启动CwRsync服务
打开任务管理器,点击服务,找到 RsyncServer ,右键,启动即可。后续只要是修改了配置文件都需要重新启动!
2.2安装CwRsync客户端
2.2.1安装
安装客户端就很简单了,一路next下一步就完事了。。。
2.2.2创建密码文件
在你安装CwRsync的目录下新建一个文本文档(txt),把你之前配置服务器端时写的 rsync.password 文件里的密码写进去即可。只用填密码!只用填密码!只用填密码!
搞定后和服务器端的一样也把文件名修改成 rsync.password 即可
2.2.3配置密码文件相关权限
同服务器端一样,在安装目录的bin目录下,在地址栏输入cmd,也输入以下代码
chmod -c 600 /cygdrive/d/cwRsync/rsync.password
chown administrator /cygdrive/d/cwRsync/rsync.password
ps:
不过此时第二段代码设置的权限拥有者就需要修改成你现在系统登录的用户名了
tips:
一般windows没有自带 chown.exe ,直接去服务器端安装的bin目录下拷贝一个chown.exe过来即可
3.测试
至此,windows下的CwRsync的安装就大功告成了。接下来进入紧张刺激的测试环节。应该会有各种各样的bug。。。。
在客户端,注意是客户端(也就是备份文件的接收方)的安装目录的bin目录下,地址栏键入cmd,输入如下命令
rsync.exe -avzP --progress --delete --password-file=/cygdrive/d/cwRsync/rsync.password NYJAdmin@192.168.1.1::SVN /cygdrive/d/new_energy_project_database_bak
命令简介:将服务器端配置文件中配置的需要备份文件,增量备份到客户端的D:\new_energy_project_database_bak目录下
ps:
- password-file后写的是你当前客户端配置的密码文件地址,文件路径写法同服务器端的配置文件
- NYJAdmin@192.168.4.1::SVN 中:
- NYJAdmin表示校验的用户名为NYJAdmin,也就是你 服务器 端rsync.password文件里配置的用户名
- 192.168.1.1就是服务器端的地址(可以先ping一下看是否能ping通)
- SVN就是服务器端配置文件里配置的模块名称
- /cygdrive/d/new_energy_project_database_bak 最后的这段表示备份的文件在 客户端 的存放地址,我这个就相当于保存在D盘下的new_energy_project_database_bak文件中
其中模块名称就是这儿配置的,好多大佬也不说一下,报个 @ERROR: auth failed on module xxx 错找半天 。。
其他参数详解 :
-avzP -a 参数,相当于-rlptgoD: -r 是递归 -l 是链接文件,意思是拷贝链接文件 -p 表示保持文件原有权限 -t 保持文件原有时间 -g 保持文件原有用户组 -o 保持文件原有属主 -D 相当于块设备文件 -v 详细模式输出 -z 传输时压缩 -P 显示传输进度 --progress 显示备份同步过程 --delete 删除Client中有Server没有的文件,即如果Server删除了这一文件,那么client也相应把文件删除,保持真正的一致
其他常见错误详见:rsync常见问题及解决办法 - CodeAntenna
4.实现自动化备份
参考这篇文章的Windows下添加计划任务即可
Windows下通过cwRsync备份到服务器&服务器之间使用rsync备份传输_ytraister的博客-CSDN博客
5.结语
兜兜转转,搞了差不多2天终于把异地备份数据库给搞完了,站在各位大佬的肩上不断优化和试错才产生了这篇文章。
参考文章: