1. 程式人生 > >Windows使用批處理實現備份機制

Windows使用批處理實現備份機制

版本資訊

windows 7、windows server 2012
cwRsync_4.1.0_Installer.exe
cwRsyncServer_4.1.0_Installer.exe
winrar-x64-550sc.exe

獲取安裝包方法,文章結尾有說明!

預裝環境

系統已經安裝好 rsync 客戶端、服務端,以及安裝了rar壓縮軟體。

實現網站的自動化運維(備份)

備份的主要有三大塊:程式碼、公共檔案(圖片)、資料庫。
備份的思路:

  1. 首先備份一份到本地目錄;
  2. 然後通過rsync同步到遠端伺服器;
  3. 新增定時任務,週期性的執行。

備份程式碼指令碼

程式碼佔用空間不大,所以每天做全量備份。

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/ [email protected]::backups --port=1220 --password-file=/cygdrive/c/Users/administrator/Documents/backups/administrator.pass < C:\Users\administrator\Documents\backups\administrator.pass

exit;
administrator.pass
[email protected]#

集合指令碼

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