最近公司要求服务器上的各种用户数据要做异备,这边有一台Windows服务器上的数据需要做异备,包括:数据库和用户数据(主要是图片数据),找了一圈决定使用CwRsync工具,用起来还不错(毕竟是来自Linux开源工具),在此记录一下使用过程及要点,以便日后查找。
服务端IP:10.0.0.1
客户端IP:10.0.0.2
- 下载
- 安装CwRsync工具
CwRsync分为服务端(数据提供端)和客户端(获取数据端),需要分别安装。
2.1 服务端安装
首先在服务器上创建一个系统帐户,比如TestSvcCwRsync(此帐户在安装CwRsync过程中要用到)。然后再安装CwRsync,在安装过程中填入上面创建的账号和密码,然后一路点下一步即可。
注:此处必须要创建一个Windows帐户,因为安装CwRsync时不会自动创建Windows帐户,如果没有此帐户则没法启动RsyncServer服务(在Windows服务里面根本找到到RsyncServer服务)。而且此帐户和密码仅仅用来启动服务使用,不做其他用途。
2.2 客户端安装
客户端安装没什么可讲的,一路点Next即可(安装目录为C:\Program Files (x86)\cwRsync)。
3. 配置
3.1 服务端配置
服务端主要配置两个文件,配置文件(rsyncd.conf)与**文件(rsync.pw)。
rsyncd.conf文件内容如下:
use chroot = false
strict modes = false
hosts allow = 10.0.0.2 10.0.0.3 #多个IP之间用空格分开
hosts deny = * #除host allow之外的所有IP都禁止
max connections = 10
log file = rsyncd.log #log文件名,可以指定路径
pid file = rsyncd.pid #pid文件名,可以指定路径. 重启rsync服务的时候需要删除此文件,否则重启失败
lock file = rsyncd.lock #lock
port = 10873 #默认端口873,在防火墙中开放此端口
uid = 0 #不指定uid,不加这一行将无法使用任何账户
gid = 0 #不指定gid
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[testdb] #模块名称,在客户端同步的时候要用
path = /cygdrive/e/database_auto_bak #被同步的数据目录,使用cygdrive来识别路径 e:\database_auto_bak
read only = false
transfer logging = yes
auth users = testRsyncUser #与安装服务或者服务器帐户无关,可自行定义,此帐户与**文件rsync.pw中的一致,且客户端要使用此帐户
secrets file = rsync.pw #**文件。帐户和密码在客户端要使用
[testUserAvatar]
path = /cygdrive/e/UserAvatar
read only = false
transfer logging = yes
auth users = testRsyncUser
secrets file = rsync.pw
rsync.pw文件里面只有账户和密码,具体格式:账户:密码。例如
testRsyncUser:test123
至此,服务端配置完成,在运行中输入services.msc打开本地服务,在服务中启动RsyncServer服务。
3.2 客户端配置
由于服务端是设置了密码的,故客户端也需要配置一个**文件。**文件名为pw.txt,里面内容只有密码(不需要帐户),具体内容如下:
test123
写一个脚本来执行远程同步操作,脚本文件名为rsyncBakDataDetail.bat。脚本具体内容:
@echo off
echo.
echo begin backup all data, please wait... %date:~0,10% %time:~0,8%
echo.
echo begin backup database data, please wait... %date:~0,10% %time:~0,8%
echo.
cd C:\Program Files (x86)\cwRsync\bin
rsync --port=10873 -vzrtopg --progress [email protected]::dbtest /cygdrive/d/Bak/DB < D:\win_script\pw.txt
echo.
echo backup database data finish... %date:~0,10% %time:~0,8%
echo.
echo.
echo begin backup UserAvatar data, please wait... %date:~0,10% %time:~0,8%
echo.
cd C:\Program Files (x86)\cwRsync\bin
rsync --port=18173 -vzrtopg --progress [email protected]::testUserAvatar /cygdrive/d/Bak/UserAvatar < D:\win_script\pw.txt
echo.
echo backup UserAvatar data finish... %date:~0,10% %time:~0,8%
echo.
echo backup all data finish... %date:~0,10% %time:~0,8%
关键脚本rsync --port=10873 -vzrtopg --progress [email protected]::dbtest /cygdrive/d/Bak/DB < D:\win_script\pw.txt 解释:
--port为服务端RsyncServer端口号
--progress显示同步过程
testRsyncUser为服务端Rsync服务的**文件中的帐户
10.0.0.1为Rsync服务端所在服务器IP
dbtest为模块名,对应要同步的数据目录
/cygdrive/d/Bak/DB为数据将被同步到本地的目录
D:\win_script\pw.txt为**文件,里面只包含密码
4.windows计划任务配置
由于备份一般都是自动的,故用windows计划任务来定时调用执行脚本。为方便记录同步日志,又创建了一个脚本rsyncBakData.bat,在此脚本中调用了rsyncBakDataDetail.bat脚本,然后计划任务来调用rsyncBakData.bat脚本即可。rsyncBakData.bat的具体内容:
@echo off
call "D:\win_script\rsyncBakDataDetail.bat" >> D:\logs\log.txt
echo ...
又由于备份数据较大,一般需要定时清理备份数据。其实rsync中加--delete可以根据服务端的文件清除而清除客户端的备份数据,但个人觉得如果不小心清除了服务端的数据,而又未及时停止rsync同步操作,导致客户端对应的备份数据也被清除,不太友好。故在客户端也用一个windows计划任务来定时清除备份数据,清除数据有两个脚本文件。其一为delBakDataDetail.bat,具体内容:
:: 清理rsync备份文件
@echo off
title 清理rsync备份文件
:: 文件目录
set log_dir="D:\Bak\DB"
:: 保留文件天数
set bak_dat=17
:: 删除文件
forfiles /p %log_dir% /s /m *.bak /d -%bak_dat% /c "cmd /c echo 正在删除@relpath 文件… & echo. & del @file"
forfiles /p %log_dir% /s /m *.txt /d -%bak_dat% /c "cmd /c echo 正在删除@relpath 文件… & echo. & del @file"
为了保存清除脚本的日志,新加一脚本delBakData.bat,此脚本中调用delBakDataDetail.bat脚本,windows计划任务调用delBakData.bat脚本。
至此,整个服务器数据异备处理完成。