最近公司要求服务器上的各种用户数据要做异备,这边有一台Windows服务器上的数据需要做异备,包括:数据库和用户数据(主要是图片数据),找了一圈决定使用CwRsync工具,用起来还不错(毕竟是来自Linux开源工具),在此记录一下使用过程及要点,以便日后查找。

服务端IP:10.0.0.1

客户端IP:10.0.0.2

  1. 下载
  2. 安装CwRsync工具

 CwRsync分为服务端(数据提供端)和客户端(获取数据端),需要分别安装。

   2.1 服务端安装

首先在服务器上创建一个系统帐户,比如TestSvcCwRsync(此帐户在安装CwRsync过程中要用到)。然后再安装CwRsync,在安装过程中填入上面创建的账号和密码,然后一路点下一步即可。


利用Windows远程数据同步工具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脚本。

至此,整个服务器数据异备处理完成。

相关文章:

  • 2022-12-23
  • 2021-06-28
  • 2021-12-08
  • 2021-05-18
  • 2022-12-23
  • 2021-11-20
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-09-30
  • 2021-06-23
  • 2022-12-23
  • 2022-01-22
  • 2021-06-05
  • 2022-12-23
相关资源
相似解决方案