原文詳見: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
添加系統的定時任務
1.開始菜單—搜尋“任務計劃程式”—建立任務—
2.建立任務:正常中設定任務名稱
觸發器添加任務執行的時間和周期
操作中,選擇啟動程式-》選擇mysqlAutobackup.bat的腳本檔案,儲存即可。