mysql自动备份脚本

@REM 版本 1.4

@REM 要测试是否能成功运行,请在配置好以下参数后,直接运行,看能否正常备份MySQL数据。如果能正常备份,那么就可以配置到计划任务中了。

@REM 注意:运行计划任务的用户,需要有访问备份文件夹和临时目录读写的权限。

@REM 如果有运行异常,请将 @ECHO OFF 删除,并在最后添加一行加入 PAUSE 好观察在哪步出了错。

@ECHO OFF

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

REM 参数配置(参数前后不能有空格)

REM 设置dbhost为主机名或IP地址

SET dbhost=localhost

SET dbport=3306

REM 设置登陆mysql数据库的用户名。如果用户名中有"号,请用""代替。

SET dbuser=root

REM 设置登陆mysql的密码。如果密码中有"号,请用""代替。

SET dbpwd=root

REM 设置backupPath为备份文件存放的路径。注意:文件夹名存在空格不需要引号括起来。警告:此文件夹应为专用目录,最好独立使用,避免删除历史备份时误删数据。

SET backupPath=D:\TLB\MySQLAutoBackup

REM 备份文件夹前缀。

SET backupFolderPrefix=MyBackup_

REM 设置删除历史备份文件。删除多少次备份之前的备份文件。0--不删除历史备份文件;1,表示一次,2,表示2次,以此类推。如set deleteHistorySkips=30表示删除30次以前的备份文件;

SET deleteHistorySkips=30

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=D:\Program Files\WinRAR

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%"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,423评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,339评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,241评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,503评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,824评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,262评论 1 207
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,615评论 2 309
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,337评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,989评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,300评论 2 240
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,829评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,193评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,753评论 3 230
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,970评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,708评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,295评论 2 267
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,207评论 2 258

推荐阅读更多精彩内容