Windows使用批處理實現備份機制
阿新 • • 發佈:2018-12-28
版本資訊
windows 7、windows server 2012
cwRsync_4.1.0_Installer.exe
cwRsyncServer_4.1.0_Installer.exe
winrar-x64-550sc.exe
獲取安裝包方法,文章結尾有說明!
預裝環境
系統已經安裝好 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/ [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