什么是rsync?
rsync 是一个快速增量文件传输工具,它可以用于在同一主机备份内部的备分,我们还可以把它作为不同主机网络备份工具之用。本文主要讲述的是如何自架rsync服 务器,以实现文件传输、备份和镜像。相对tar和wget来说,rsync 也有其自身的优点,比如速度快、安全、高效。
预装环境
系统已经安装好 rsync 客户端、服务端,以及安装了rar压缩软件,获取安装包方法,文章结尾有说明。
实现网站的自动化运维(备份)
备份的主要有三大块:代码、公共文件(图片)、数据库。
备份的思路:
- 首先备份一份到本地目录;
- 然后通过rsync同步到远程服务器;
- 添加定时任务,周期性的执行。
备份代码脚本
代码占用空间不大,所以每天做全量备份。
code_all_back.bat
@echo off
@echo ###################################################################
@echo # 2018-xx-xx
@echo # 每天0点之后全量备份前一天的代码
@echo ###################################################################
rem 获取前一天的日期
call lastday.bat arg1
set LASTDAY=%arg1%
set TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
rem code主目录
set CODEDIR=D:\web
rem 备份目录
set BPD=E:\backups\code
set BACKDIR=%BPD%\%LASTDAY%
rem 日志文件
set LOGFILE=E:\backups\logs\code-all-back.log
@echo %date% %time% code-all-back backup start >> %LOGFILE%
@echo backdir : %BACKDIR% >> %LOGFILE%
rem 创建备份目录
mkdir %BACKDIR%
rem 备份目录
rem /EXCLUDE:参数是跳过哪些目录
xcopy /e /c /y %CODEDIR% %BACKDIR% /EXCLUDE:list_of_exclusions.txt
rem 压缩目录
"C:\Program Files\WinRAR\rar" a -df -ep1 %BPD%\code-back-%LASTDAY%.rar %BACKDIR%
@echo %date% %time% code-all-back backup finish >> %LOGFILE%
exit;
lastday.bat
@echo off
rem 输出昨天日期
echo Wscript.echo dateadd("d",-1,date)>vbs.vbs
for /f %%a in ('cscript //nologo vbs.vbs') do del vbs.vbs&&set yyyymmdd=%%a
for /f "tokens=1,2,3* delims=// " %%i in ('echo %yyyymmdd%') do set yyyy=%%i&set mm=%%j&set dd=%%k
if %mm% LSS 9 set mm=0%mm%
if %dd% LSS 9 set dd=0%dd%
set "%1=%yyyy%%mm%%dd%"
list_of_exclusions.txt
\public\
备份公共文件(图片)
公共文件增长速度快,占用空间大,所以采用rsync来实现每天增量备份。
public_inc_back.bat
@echo off
@echo ###################################################################
@echo # 2018-xx-xx
@echo # 每天0点之后增量同步前一天的公共文件
@echo ###################################################################
rem 每一次同步,都会去遍历整个目录,后面如果图片目录数据大了,消耗资源太大,还需要对代码进行优化,按需同步
C:
cd C:\Program Files (x86)\cwRsync\bin
rsync.exe -av /cygdrive/d/web/public /cygdrive/e/backups/public
exit;
增量备份数据库
每天对mysql数据库进行增量备份,需先开启log-bin。
mysql_inc_back.bat
@echo off
@echo ###################################################################
@echo # 2018-xx-xx
@echo # 每天0点之后增量备份前一天的数据库
@echo ###################################################################
rem 获取前一天的日期
call lastday.bat arg1
set LASTDAY=%arg1%
set TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
rem mysql主目录
set MYSQLDIR=D:\mysql-5.6.39-winx64
set LOGBINDIR=D:\mysql-5.6.39-winx64\data\log-bin
rem 备份目录
set BPD=E:\backups\mysql\day
set BACKDIR=%BPD%\%LASTDAY%
rem 日志文件
set LOGFILE=E:\backups\logs\log-bin-back.log
set USERNAME=root
set PASSWORD=root
@echo %date% %time% Incremental backup start >> %LOGFILE%
@echo backdir : %BACKDIR% >> %LOGFILE%
rem 创建备份目录
mkdir %BACKDIR%
rem 刷新增量文件
%MYSQLDIR%\bin\mysqladmin -u%USERNAME% -p%PASSWORD% flush-logs
rem 备份昨天的增量文件
for %%a in (%LOGBINDIR%\*.*) do (
for /f "skip=1 tokens=1-3 delims=-/ " %%b in ('dir /tc "%%a"^|findstr ":"') do (
if "%%b%%c%%d" == "%LASTDAY%" xcopy /e /c /h /y %%a %BACKDIR%
)
)
rem 压缩目录
"C:\Program Files\WinRAR\rar" a -df -ep1 %BPD%\mysql-bin-%LASTDAY%.rar %BACKDIR%
@echo %date% %time% Incremental backup finish >> %LOGFILE%
exit;
全量备份数据库
mysql_all_back.bat
每周对mysql数据库做全量备份。
@echo off
@echo ###################################################################
@echo # 2018-xx-xx
@echo # 每周全量备份前一周的数据库
@echo ###################################################################
rem 获取前一天的日期
call lastday.bat arg1
set LASTDAY=%arg1%
set TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
rem mysql主目录
set MYSQLDIR=D:\mysql-5.6.39-winx64
rem 备份文件
set DOWNDIR=E:\backups\mysql\week
set DOWNFILE=%DOWNDIR%\%LASTDAY%.sql
rem 日志文件
set LOGFILE=E:\backups\logs\log-bin-back.log
set USERNAME=root
set PASSWORD=root
@echo %date% %time% all backup start >> %LOGFILE%
@echo downfile : %DOWNFILE% >> %LOGFILE%
rem 刷新增量文件
%MYSQLDIR%\bin\mysqldump -u%USERNAME% -p%PASSWORD% --all-databases --lock-all-tables --routines --triggers --events --master-
data=2 --flush-logs > %DOWNFILE%
rem 压缩目录
"C:\Program Files\WinRAR\rar" a -df -ep1 %DOWNDIR%\mysql-dump-%LASTDAY%.rar %DOWNFILE%
@echo %date% %time% all backup finish >> %LOGFILE%
exit;
同步到远程目标主机上
rsync.bat
@echo off
C:
cd C:\Program Files (x86)\cwRsync\bin
rsync.exe -av /cygdrive/e/backups/ administrator@192.168.1.100::backups --port=1220 --password-file=/cygdrive/c/Users/administrator/Documents/backups/administrator.pass < C:\Users\administrator\Documents\backups\administrator.pass
exit;
administrator.pass
abc123!@#
集合脚本
start_rsync.bat
在集合脚本中周期性控制其他脚本的执行。
@echo off
set DIR=C:\Users\administrator\Documents\backups
rem 全量备份代码
start /wait /D %DIR% call code_all_back.bat
rem 增量备份图片
start /wait /D %DIR% call public_inc_back.bat
rem 增量备份数据库
start /wait /D %DIR% call mysql_inc_back.bat
rem 每周六全量备份数据库
if %date:~-3%==周六 (
start /wait /D %DIR% call mysql_all_back.bat
)
start /wait /D %DIR% call wzqf.bat
计划任务
加入计划任务中,让其每天0点过后执行即可。
1)运行->输入compmgmt.msc打开计算机管理。
2)右键任务计划->创建任务,如下设置,完成确定即可。
源码包下载链接:https://download.csdn.net/download/weixin_38642130/10874512