一台服务器可能有N多个文件需要同步备份, 那怎么办呢? 其实这个也很容易解决, 就是在服务器端多建几个模块, 每个模块包含不同的文件夹, 使用同样的密码文件即可实现. 如同下面的:
use chroot = false #不使用chroot, 其实这个应该是针对linux系统来说的.既然是默认的, 就不用修改了
strict modes = false #不使用严格的用户限制
hosts allow = * #设定允许访问该服务的IP地址, 如果不限制, 则使用*
max connections = 5 #最大连接数, 不需要过多解释了吧?
port = 14598 #使用的端口,如果没有这一设置的话, 默认的端口是873, 为了提高安全性,同时为了避免与系统保留的端口相冲突, 最好将该端口设置为1024以上的.
gid = 0 #及下一行不限定访问用户及用户组
uid = 0
log file = /cygdrive/c/Setting/rsyncd.log #放置rsync的日志文件路径
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[data_backup] #模块名称
path = /cygdrive/c/data_backup #备份路径
auth users = zhangsan #访问的用户名
read only = false # 不只限制是只读属性
secrets file = /cygdrive/c/Setting/Rsync/rsync_db.ps #存放认证用户密码信息的文件及路径
lock file = rsyncd.lock
list = no #文件表不列出
ignore errors #屏蔽无关的IO错误
transfer logging = yes #记录传输日志
[site_bak] #改动的模块名称
path = /cygdrive/c/site_bak #改动的备份路径
auth users = zhangsan #访问的用户名
read only = false # 不只限制是只读属性
secrets file = /cygdrive/c/Setting/Rsync/rsync_db.ps #存放认证用户密码信息的文件及路径
lock file = rsyncd.lock
list = no #文件表不列出
ignore errors #屏蔽无关的IO错误
transfer logging = yes #记录传输日志
.......
其余部分不变,依次类推即可.
至此, 已经实现了多源站的数据同步备份功能.
在网上, 看到有朋友通过任务计划的方式来实现定期定时地同步文件, 不知道是怎么回事, 我这边一直无法实现这样的功能, 后来想想, 毕竟要备份的源站都是生产环境下的. 还是手动备份比较好一些吧, 所以就没有细细地研究了. 如果有朋友做到的话, 请提供一下地址. 我好拜读一下.
其实做这个教程时, 我已经完成了本地的配置验证, 服务器间的同步功能, 但是在写这个教程而重建环境时仍然遇到了一些小问题, 虽然解决很简单,但是找到问题点却是颇费心思和精力的, 以下是我的教训,希望供朋友们借簦
教训总结:
1. 注意服务器端配置文件的每一行的行尾都不要留空格, 这个看起来很简单的问题, 很有可能在运行时出现这样的提示,
ERROR: auth failed on module data_backup rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
我相信很多人都会遇到这个问题, 即使你已经严格地按照某些教程操作而仍然出现这样的提示的时候, 你就会很崩溃了. 而我就因为这一点而浪费了将近一天的时间, 只是偶然才发现这个问题, 解决起来也很简单, 就是把这几个空格去掉. 当然,另外的因素就是你考虑是不是你的服务器端的密码文件权限问题, 即要保证是600权限, 也就是只有读写权限, 对于WINDOW来说, 这个权限的设置有点头疼, 这个问题我也解决了, 那就是把文件的权限设置为只允许当前用户读写, 在这个时候, 会有如下的提示:
直接点击"是"即可, 这样的话, 其他的用户也就无法访问了, 当然也不能编辑. 如果想编辑的话, 就再加其他的用户即可.
另外, 在WIN下也可以在服务器端给这个文件添加SvcCWRSYNC用户的方式来解决, 如图示:
2. 服务器端的密码文件和客户端的密码文件可以分别放在不同的盘符和文件夹内, 不影响软件的正常使用, 所以不用纠结它们是不是对应, 我这篇文章中已经体现出来了, 服务器端的密码文件时这样的格式: 用户名:密码, 如本例中的wufengg:wf5874, 而客户端的是只有用户的密码, 如本例中的wf5874, 这一点要注意, 另外, 还有一点, 不管服务器端建有多少个用户密码, 对应于某一台具体的客户端来说, 对它有效的只有一个用户, 也就是第一行密码对应的用户, 第二行密码对应的用户是无法运行的. 这一点如果不注意的话, 会裁跟头的;
3.批处理文件要注意保持每一条命令都占用一整行, 否则会因为命令不全导致运行失败的. 所以粘贴到记事本的时候要注意去掉自动换行的功能, 这样的话会比较容易发现这个问题的;
rsync常见问题及解决办法:
错误1: rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receive r=3.0.2]
解决:很大可能是服务器端没有开启 rsync 服务。开启服务。
错误2:@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解决:服务器端同步目录没有权限,cwrsync默认用户是Svcwrsync。为同步目录添加用户Svcwrsync权限。
错误3:@ERROR: failed to open lock file
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解决:配置文件 rsync.conf中添加 lock file = rsyncd.lock 即可解决。
错误4: rsync: could not open password file "/cygwin/e/Setting/Rsync/rsync_db.pwd": No such file or directory (2)
解决:密码文件的目录一定要存在,而且要用POSIX风格的写法:/cygdrive/e/Setting/Rsync/rsync_db.pwd
错误5:@ERROR: auth failed on module data_backup rsync
error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
解决:密码错误,输入正确的密码即可。用户名和密码如果都正确,可能是远程rsync服务器的帐户密码文件的权限必须为600, 这一点还要注意空格问题是否存在;
错误6: password file must not be other-accessible
解决:这是因为rsyncd.pwd rsyncd.sec的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd, Windows下应将密码文件的所有者改成程序运行的用户。
错误7:@ERROR: invalid uid nobody . rsync
error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
解决:在rsyncd.conf文件中添加下面两行即可
uid = 0
gid = 0
问题8: @ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:服务器端的目录不存在或无权限。创建目录并修正权限可解决问题。
问题9:@ERROR: Unknown module ‘data_backup’
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。
问题10:rsync: failed to connect to 192.168.25.137: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
原因:对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873或者指定的rsync端口打开。
问题11:rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
原因:/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。
问题12:rsync: chown "" failed: Invalid argument (22)
原因:权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)
问题13:@ERROR: daemon security issue -- contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
原因:同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。略过软连接文件。
问题14:rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receiver=3.0.2]
解决:很大可能是服务器端没有开启 rsync 服务,开启服务。
问题15: rysnc: failed to connect to 192.168.25.137: Connect refused(111)
rsync error: error in socket IO [Receiver=3.0.7]
解决: 出现这个错误要检查一下你的连接端口是不是与服务器端的端口一致