天天看點

定時備份mysql資料

原文詳見:https://www.jianshu.com/p/3e050aad75d9

定時備份mysql資料步驟:

1.編輯自動備份的腳本檔案:copyDB.bat:

@REM 版本 1.4

@REM 要測試是否能成功運作,請在配置好以下參數後,直接運作,看能否正常備份MySQL資料。如果能正常備份,那麼就可以配置到計劃任務中了。

@REM 注意:運作計劃任務的使用者,需要有通路備份檔案夾和臨時目錄讀寫的權限。

        @REM 如果有運作異常,請将 @ECHO OFF 删除,并在最後添加一行加入 PAUSE 好觀察在哪步出了錯。

        @ECHO OFF

        REM ***************************************************************************

        REM 參數配置(參數前後不能有空格)

        REM 設定dbhost為主機名或IP位址

        SET dbhost=58.213.83.82                 ------------------------------改為你需要備份的伺服器的ip

        SET dbport=3306

        REM 設定登陸mysql資料庫的使用者名。如果使用者名中有"号,請用""代替。

        SET dbuser=root                                --------------------------需要備份資料的資料庫帳号

        REM 設定登陸mysql的密碼。如果密碼中有"号,請用""代替。

        SET dbpwd=123456                         ---------------------------------需要備份資料的資料庫密碼

        REM 設定backupPath為備份檔案存放的路徑。注意:檔案夾名存在空格不需要引号括起來。警告:此檔案夾應為專用目錄,最好獨立使用,避免删除曆史備份時誤删資料。

        SET backupPath=E:\timeCopyDB\copyData    ---------------------------------備份下來的檔案存放位置

        REM 備份檔案夾字首。

        SET backupFolderPrefix=MyBackup_

        REM 設定删除曆史備份檔案。删除多少次備份之前的備份檔案。0--不删除曆史備份檔案;1,表示一次,2,表示2次,以此類推。如set deleteHistorySkips=30表示删除30次以前的備份檔案;

        SET deleteHistorySkips=1

        REM 設定備份時發生錯誤是否删除曆史備份檔案。yes--删除;no--不删除。

        SET onErrorDeleteBackFile=no

        REM 是否啟用壓縮功能。yes--開啟壓縮功能。no--禁用壓縮功能。預設值:no,不開啟。

        SET enableCompress=yes

        REM 設定WinRAR壓縮級别。取值0到5。0--無壓縮;5--最高壓縮比;預設值:3

        SET compressLevel=3

        REM 壓縮類型。cab--系統内置cab壓縮功能。rar--啟用RAR壓縮功能,需要安裝RAR壓縮軟體支援

        SET compressType=cab

        REM 設定WinRAR安裝路徑。

        SET rarPath=C:\Program Files (x86)\360\360SafeuA\360zip                ---------------你本地的壓縮檔案安裝路徑

        REM 設定分卷大小。0--表示不分卷;1--表示1k,1024--表示1M,2048--表示2M;預設值:102400,表示100M

        SET volumePackSize=0

        REM 設定壓縮密碼。{empty}表示沒有密碼。其他字元表示壓縮檔案密碼

        SET rarPwd={empty}

        REM 設定臨時目錄。如果備份時系統預設臨時目錄所在分區空間太小,可以通過這裡調整該腳本運作的臨時目錄。預設值:%TEMP%

        REM 啟用壓縮時,零時目錄占用空間較大,大約是備份資料庫的1.2倍。不啟用壓縮,占用臨時目錄空間很小。

        REM 如果啟用了CAB壓縮,臨時目錄最好和備份檔案夾在同一個分區。請保證指定的臨時目錄存在。

        SET TEMP=%TEMP%

        REM 完成參數配置

        REM ***************************************************************************

        REM ***************************************************************************

        REM 環境檢測,參數檢測和初始化

        REM 設定%myDate%為目前日期(2013-01-02)。因為日期後可能跟一個空格和星期幾,并且日期中可能是”/"分割,是以要去除掉星期幾和斜線。

        FOR /F "tokens=1,2* delims= " %%i IN ('ECHO %date:/=-%') DO SET "myDate=%%i"

        REM 設定%MyTime%為目前時間。格式:20.56.30.99

        SET myTime=%TIME::=.%

        SET myTime=%myTime: =0%

        REM 設定零時目錄

        SET myTempDir=%TEMP%\MySQLBack_%myDate%_%MyTime%

        REM 設定備份日志檔案

        SET backupLogFile=%backupPath%\MySQLBackLog.txt

        REM 用于環境檢測的零時檔案名

        SET checkFileName=_1_2_3_backup_mysql_check_%myDate%_%MyTime%

        REM ****目錄權限檢測****

        REM 檢查備份目錄是否存在,不存在則建立

        :CheckAndMakeBackupFolder

        IF exist "%backupPath%" GOTO CheckBackupFolderCreatFile

        MD "%backupPath%"

        IF %errorlevel%==0 GOTO CheckBackupFolderCreatFile

        ECHO 建立資料庫備份目錄失敗。請檢測您是否具有寫入"%backupPath%"的權限,或者驅動器是否存在。

        PAUSE

        GOTO END

        REM 檢查備份目錄是否有建立檔案的權限

        :CheckBackupFolderCreatFile

        ECHO. > "%backupPath%\%checkFileName%"

        IF EXIST "%backupPath%\%checkFileName%" del "%backupPath%\%checkFileName%" /Q /F & GOTO CheckBackupFolderCreateFolder

        ECHO 請檢查對備份檔案夾"%backupPath%"是否有檔案寫入權限。

        PAUSE

        GOTO END

        REM 檢查備份目錄是否有建立檔案夾的權限

        :CheckBackupFolderCreateFolder

        MD "%backupPath%\%checkFileName%" && ( RD /S /Q "%backupPath%\%checkFileName%" & GOTO CheckTempFolderAccess )

        ECHO %myDate% %TIME%    請檢查對備份檔案夾"%backupPath%"是否有建立檔案夾的權限。>>"%backupLogFile%"

        GOTO END

        REM 檢測臨時目錄通路權限

        :CheckTempFolderAccess

        ECHO. > "%temp%\%checkFileName%"

        IF EXIST "%temp%\%checkFileName%" DEL "%temp%\%checkFileName%" /Q /F & GOTO MakeTempFolder

        ECHO %myDate% %TIME%    沒有臨時目錄寫入權限。請用具有權限的使用者執行備份腳本。>>"%backupLogFile%"

        GOTO END

        REM 建立零時目錄

        :MakeTempFolder

        MD "%myTempDir%" && GOTO CheckMySQLInstalled

        ECHO %myDate% %TIME%    無法建立臨時目錄"%myTempDir%"。請檢查臨時目錄權限。>>"%backupLogFile%"

        GOTO END

        REM ****完成目錄權限檢測****

        REM 檢測MySQL是否安裝

        :CheckMySQLInstalled

        mysql --help > NUL && GOTO CheckMySQLConnect

        ECHO %myDate% %TIME%    無法檢測到mysql,請確定已經正确安裝MySQL.或者将MySQL的Bin目錄的路徑添加到系統變量Path中。>>"%backupLogFile%"

        GOTO CheckParmsFailed

        REM 驗證資料庫連接配接

        :CheckMySQLConnect

        ECHO exit | mysql -h"%dbhost%" -u"%dbuser%" -p"%dbpwd%" > NUL && GOTO CheckdeleteHistorySkips

        ECHO %myDate% %TIME%    無法連接配接到%dbhost%。請檢服務是否啟動,連接配接的使用者名和密碼是否正确。>>"%backupLogFile%"

        GOTO CheckParmsFailed

        REM 驗證删除曆史備份配置參數

        :CheckdeleteHistorySkips

        ECHO %deleteHistorySkips%| findstr /be "[0-9]*" > nul && GOTO CheckOnErrorDeleteBackFile

        ECHO %myDate% %TIME%    删除曆史備份檔案"deleteHistorySkipsFailed"配置錯誤,隻能配置整數。>>"%backupLogFile%"

        GOTO CheckParmsFailed

        REM 驗證删除曆史備份配置參數

        :CheckOnErrorDeleteBackFile

        IF %onErrorDeleteBackFile%==no GOTO CheckCompressConfig

        IF %onErrorDeleteBackFile%==yes GOTO CheckCompressConfig

        ECHO %myDate% %TIME%    備份錯誤時是否删除曆史檔案"onErrorDeleteBackFile"配置參數錯誤。>>"%backupLogFile%"

        GOTO CheckParmsFailed

        REM 檢查壓縮軟體配置

        :CheckCompressConfig

        IF %enableCompress%==no GOTO CheckSuccess

        IF %enableCompress%==yes GOTO CheckCompressLevel

        ECHO %myDate% %TIME%    是否啟用壓縮變量"enableCompress"的參數隻能是"yes"或者"no".請檢查配置。>>"%backupLogFile%"

        GOTO CheckParmsFailed

        REM 檢查壓縮級别

        :CheckCompressLevel

        ECHO %compressLevel%| findstr /be "[0-5]" > nul && GOTO CheckVolumePackSize

        ECHO %myDate% %TIME%    壓縮級别"compressLevel"配置錯誤,參數隻能是0~5的數字>>"%backupLogFile%"

        GOTO CheckParmsFailed

        REM 驗證RAR分卷大小設定

        :CheckVolumePackSize

        ECHO %volumePackSize%| findstr /be "[0-9]*" > nul && GOTO CheckCompressType

        ECHO %myDate% %TIME%    壓縮包分卷大小"volumePackSize"配置錯誤。請檢查設定。>>"%backupLogFile%"

        GOTO CheckParmsFailed

        REM 檢查壓縮類型

        :CheckCompressType

        IF %compressType%==rar GOTO CheckRarPath

        IF %compressType%==cab GOTO CheckMakeCab

        ECHO %myDate% %TIME%    壓縮類型"compressType"設定錯誤.值隻能是"cab"或者"rar".請檢查設定。>>"%backupLogFile%"

        GOTO CheckParmsFailed

        REM 驗證RAR配置目錄

        :CheckRarPath

        IF exist "%rarPath%\Rar.exe" GOTO CheckSuccess

        ECHO %myDate% %TIME%    WinRAR安裝路徑"rarPath"設定錯誤.請檢查設定。>>"%backupLogFile%"

        GOTO CheckParmsFailed

        REM 驗證makecab

        :CheckMakeCab

        makecab /? >NUL && GOTO CheckSuccess

        ECHO %myDate% %TIME%    系統内置MakeCab壓縮功能無法使用,請使用RAR進行壓縮。>>"%backupLogFile%"

        GOTO CheckParmsFailed

        REM 參數驗證無法通過時

        :CheckParmsFailed

        ECHO 無法完成初始化。請檢視日志檔案:%backupLogFile%

        RD /S /Q "%myTempDir%"

        GOTO END

        REM 驗證成功

        :CheckSuccess

        REM 完成環境檢測和初始化

        REM ***************************************************************************

        REM ***************************************************************************

        REM 備份資料庫

        ECHO %myDate% %TIME%    啟動資料庫備份腳本...>>"%backupLogFile%"

        REM 目前備份使用的檔案夾

        set backupName=%backupFolderPrefix%%myDate% %myTime%

        REM 根據需要建立專屬目錄。在分卷壓縮或者不壓縮時,需要專屬目錄

        IF %enableCompress%==no MD "%backupPath%\%backupName%"

        IF %enableCompress%==yes ( IF NOT %volumePackSize%==0 MD "%backupPath%\%backupName%" )

        IF "%enableCompress%"=="yes" MD "%myTempDir%\%backupName%"

        REM 設定資料庫備份使用的直接目錄

        IF "%enableCompress%"=="no" SET backDbTmpPath=%backupPath%\%backupName%

        IF "%enableCompress%"=="yes" SET backDbTmpPath=%myTempDir%\%backupName%

        SET errorFile=%backDbTmpPath%\##BackupFailDbs.txt

        SET dbList=%myTempDir%\dblist.txt

        SET backmysqlbat=%myTempDir%\bakmysql.bat

        REM 生成資料庫清單檔案

        ECHO show databases; | mysql -h"%dbhost%" -u"%dbuser%" -p"%dbpwd%" > "%dblist%"

        SET isExistError=no

        REM 建立備份MySQL資料庫的腳本。

        ECHO ECHO 未成功備份的資料庫: ^> "%errorFile%" > "%backmysqlbat%"

        FOR /f "usebackq skip=1 tokens=*" %%i in ("%dblist%") DO ECHO mysqldump --no-defaults --single-transaction "%%i" -h"%dbhost%" -P"%dbport%" -u"%dbuser%" -p"%dbpwd%" ^> "%backDbTmpPath%\%%i.sql" >>"%backmysqlbat%" && ECHO if not %%errorlevel%%==0 (ECHO %%i ^>^> "%errorFile%" ^& ECHO %myDate% %TIME% 資料庫備份失敗:%%i^>^>"%backupLogFile%" ^& SET isExistError=yes) >> "%backmysqlbat%"

        call "%backmysqlbat%"

        REM 如果不存在錯誤,删除錯誤檔案。

        IF %isExistError%==no DEL "%errorFile%" /Q /F > NUL

        IF %enableCompress%==yes GOTO CompressBackup

        GOTO BackupFinished

        REM ****壓縮處理****

        :CompressBackup

        IF %compressType%==rar GOTO RarCompress

        REM CAB壓縮處理

        REM 進行CAB壓縮。注:makecab,不能在一個壓縮包中建立目錄。而且需要建立檔案清單才能建立多檔案壓縮包。同時檔案名不能重複。

        FOR /f "tokens=1* delims=" %%i in ('DIR "%backDbTmpPath%" /S /B /A-D') do echo "%%i" >> "%myTempDir%\cab_files.lst"

        SET cabCompressLevel=18

        IF %compressLevel%==0 SET cabCompressLevel=15

        IF %compressLevel%==0 SET cabCompressLevel=21

        REM 切換到零時目錄

        FOR /F "delims=:" %%i IN ('ECHO %myTempDir%') DO %%i:

        CD "%myTempDir%"

        IF NOT %volumePackSize%==0 GOTO CabSplitCompress

        makecab /f "%myTempDir%\cab_files.lst" /d compressiontype=lzx /d compressionmemory=%cabCompressLevel% /d maxdisksize=0 /d diskdirectorytemplate=cabdb /d cabinetnametemplate="%backupName%.cab"

        MOVE /Y "%myTempDir%\cabdb\%backupName%.cab" "%backupPath%\"

        GOTO BackupFinished

        :CabSplitCompress

        SET /A maxdisksize=%volumePackSize% * 1024

        makecab /f "%myTempDir%\cab_files.lst" /d compressiontype=lzx /d compressionmemory=%cabCompressLevel% /d maxdisksize=%maxdisksize% /d diskdirectorytemplate=cabdb /d cabinetnametemplate="%backupName%.part*.cab"

        MOVE /Y "%myTempDir%\cabdb\*" "%backupPath%\%backupName%\"

        GOTO BackupFinished

        REM RAR 壓縮處理

        :RarCompress

        SET rarCommand="%rarPath%\rar.exe" a -r -ep1 -o+ -m%compressLevel%

        IF NOT %volumePackSize%==0 SET rarCommand=%rarCommand% -v%volumePackSize%

        IF NOT %rarPwd%=={empty} SET rarCommand=%rarCommand% -p%rarPwd%

        REM 如果未分卷,儲存在備份目錄的根目錄

        IF %volumePackSize%==0 SET rarCommand=%rarCommand% "%backupPath%\%backupName%.rar"

        REM 如果分卷,儲存在根目錄下的一個專屬檔案夾中

        IF NOT %volumePackSize%==0 SET rarCommand=%rarCommand% "%backupPath%\%backupName%\%backupName%.rar"

        SET rarCommand=%rarCommand% "%backDbTmpPath%\"

        %rarCommand%

        REM ****完成壓縮處理****

        :BackupFinished

        ECHO %myDate% %TIME%    完成一次自動備份。備份目錄:"%backupPath%\%backupName%" >> "%backupLogFile%"

        IF %isExistError%==yes ECHO 但是存在沒有成功備份的資料庫。檢視沒有成功備份的資料庫,請檢視檔案備份檔案夾中的"##BackupFailDbs.txt" >> "%backupLogFile%"

        REM 完成備份資料庫

        REM ***************************************************************************

        REM ***************************************************************************

        REM 删除曆史備份

        :RemoveHistoryBackup

        IF %isExistError%==yes ( IF %onErrorDeleteBackFile%==no GOTO ClearTmpFile )

        IF %deleteHistorySkips%==0 GOTO ClearTmpFile

        IF %enableCompress%==no GOTO RemoveHistoryBackupFolder

        IF NOT %volumePackSize%==0 GOTO RemoveHistoryBackupFolder

        GOTO RemoveHistoryBackupFile

        :RemoveHistoryBackupFolder

        FOR /F "Skip=%deleteHistorySkips% tokens=*" %%i IN ('DIR "%backupPath%\%backupFolderPrefix%*" /TC /O-D /AD /B') DO RD "%backupPath%\%%i" /S /Q & ECHO %myDate% %TIME%   删除曆史備份:%%i >> "%backupLogFile%"

        GOTO ClearTmpFile

        :RemoveHistoryBackupFile

        FOR /F "Skip=%deleteHistorySkips% tokens=*" %%i IN ('DIR "%backupPath%\%backupFolderPrefix%*" /TC /O-D /A-D /B') DO DEL "%backupPath%\%%i" /Q /F & ECHO %myDate% %TIME% 删除曆史備份:%%i >> "%backupLogFile%"

        GOTO ClearTmpFile

        REM 完成删除曆史備份

        REM ***************************************************************************

        :ClearTmpFile

        CD \

        RD /S /Q "%myTempDir%" > NUL

        :END

        ECHO. >> "%backupLogFile%"           

2.配置定時任務:

在系統變量path中加入資料庫的安裝路徑

打開計算機—屬性—進階環境變量配置—path

定時備份mysql資料

添加系統的定時任務

1.開始菜單—搜尋“任務計劃程式”—建立任務—

2.建立任務:正常中設定任務名稱

觸發器添加任務執行的時間和周期

操作中,選擇啟動程式-》選擇mysqlAutobackup.bat的腳本檔案,儲存即可。

定時備份mysql資料
定時備份mysql資料

繼續閱讀