Windows下MySQL自动备份的最佳方案
在Windows下备份MySQL数据库专门的软件较少,也不是很方便,所以网上基本上都是批处理脚本+Windows计划任务自动备份。
当然本文也是这样的文章,只是备份脚本容错性更好,也比较灵活。我比较笨,这个脚本的这个版本就折腾了我好几天。所以希望对大家有所帮助。我会把脚本的原理和一些重要代码贴出来,如果想自己尝试,可以自己写一写,不过还是要多多调试才能写出自己的脚本。如果不想写,可以下载我打包好的,希望大家支持,赚点积分。
我们首先需要编写脚本,然后将脚本添加到Windows的任务计划。
完整脚本:下载地址
该脚本的目标:
1. 将数据库包括系统数据库备份到指定目录,每个数据库一个文件。
2. 多次备份产生不同的目录,不能覆盖曾经的备份。
3. 可以删除N次以前的备份,比如说30次以前的备份。可以开启备份存在错误时不删除历史备份。最大限度的保证了数据的可追溯性。
4. 绿色支持CAB压缩备份MySQL数据库,保证在没有安装压缩软件的电脑上也能使用压缩备份MySQL数据库。
5. 支持WinRAR压缩备份MySQL数据库,可以启用压缩密码,保证备份的MySQL数据库更加安全。
6. 支持压缩包分卷,便于保存。
7. 可以通过日志查看数据库备份日志。
8. 提供完善的环境和配置参数校验,给出尽可能详细的错误提示,降低使用难度。
注:本文用到的mysql和mysqldump命令,需要安装了mysql数据库的电脑上才能使用这两个命令。这两个可执行文件在mysql安装目录的bin目录中,可以复制出来单独使用。
在Windows下备份MySQL数据库,我知道两种方法。第一种,直接复制MySQL的数据库目录。第二种,通过mysqldump导出MySQL数据,以SQL文本方式保存。这两种方法应该选择哪种方法更好呢?我们来分析一下。
该方法备份简单,速度迅速。这是主要优点。但是该方法存在两个致命下问题:第一个缺陷,数据完整性问题,在复制数据库时,可能其他用户在修改数据库,那么数据可能存在不一致的情况。解决的方法是,复制数据时,关闭MySQL服务,但是这样就导致了用户无法访问数据的情况,如果是很多数据库运行在一个服务中,那么所有用户都将无法连接。第二个缺陷,MySQL数据库现在有两种存储引擎,MyISAM和InnoDB。MyISAM是传统的存储引擎扩展,在创建表的时候如果选择MyISAM存储引擎,那么就会在数据库文件夹下创建3个文件,数据也会写入到相应的文件中,这时用复制目录方法备份数据库没有问题。如果创建表时选择的是InnoDB引擎,这时在数据库目录下只会创建表的结构文件,并不会创建数据文件,这个表的数据被保存到另外一个独立数据库的文件中了,所以这时就算复制数据库目录,却复制不到数据,备份的数据库也无法复制到新的环境中使用。
通过该方法备份需要在备份的机器上安装MySQL数据库。该方法的备份速度比直接复制目录慢一些。但是他却能解决直接复制目录所带来的缺点。该方法是在线备份,不需要停止数据库引擎。也就不会终断其他用户的连接。就算启动了事务,也只会锁定正在备份的数据库。该方法不区分存储引擎的类型,一视同仁的导出SQL文本文件。
所以我们选择mysqldump方法类备份我们的数据库。
mysqldump 数据库名 –h主机 –u用户名 –p密码 > 备份文件名.SQL
这条命令就是将“数据库名”所指定的数据库,备份成“备份文件名.SQL”备份文件。如果你就备份一个数据库,也没有其他要求,就这一条命令就可以了。如果需要自动备份,那么请使用windows的任务计划,将脚本添加进去。如何使用任务计划完成MySQL的自动备份,请参看后面的说明。
如果我们需要一个更加完备的备份脚本,还需要进一步完善。
Mysqldump命令有一个参数-A可以直接备份所有的数据库,但是他只能将所有数据库备份到一个文件中,不能让每个数据库保存在一个独立文件中。这样不方便恢复一个数据库,也不方便管理。
我们备份的数据库需要在一个单独目录下,一个数据库一个备份文件的方式来备份所有的数据库。备份文件的名称就用数据库的名称来命名。
我们应该如何做呢?我们应该先获取数据库的列表,然后循环这个列表,逐个备份。
用mysql的 show databases命令就可以获取所有的数据库,包括系统数据库。在批处理中这样输入:
echo show databases; | mysql-hlocalhost -uroot –p123456
这条语句中包含了 两条命令,通过|将其分开。|后面的指令是通过mysql命令连接到mysql数据库,连接成功后,可以在其中输入MySQL的SQL语句。如果直接执行这个语句,连接成功后,输入show database,那么就会显示数据库的列表。echo show database; 就是输出show database;因此需要通过 | 直接将命令 show database 传递给 mysql 命令,mysql执行传来的命令后并且会自动退出。|这个称之为管道命令,可以将左边命令的结果传递给右边的命令。并且完成之后,右边的命令会退出。
这条语句得到如下结果:
Database
information_schema
mysql
performance_schema
test
wordpress
第一行是标题,其他就是数据库。列表获取之后,我们就可以通过循环来备份了。
要逐个备份数据库,需要使用for语句。For语句可以从文件中读取内容,然后循环处理每一行。for也可以直接循环处理命令的输出结果。因为输出数据库列表的指令比较复杂,怕影响for语句的正常运行,所以这里选择先输出到文件,然后for语句从文件中读取结果处理。
Set backupPath=F:\dbbackup
Set dbhost=localhost
Set dbuser=root
set dbpwd=123456
set dblist=%temp%\dblist.txt
echo showdatabases; | mysql -h"%dbhost%" -u"%dbuser%" -p"%dbpwd%" > "%dblist%"
for /f " usebackq skip=1 tokens=*" %%i in ("%dblist%") do mysqldump--single-transaction "%%i" -h"%dbhost%" -u"%dbuser%" -p"%dbpwd%" > "%backupPath%\%%i.sql"
说明:先通过SET命令设置变量。然后在零时目录生成数据库列表文件。
重点是for语句,For语句将%%i作为变量,然后循环匹配括号里提供的内容,每匹配成功一次就执行一次do后面的命令,并且会把匹配成功的结果保存在%%i中,可以在do后面的命令中使用。
参数/F 表示读取 in 后面括号里提供的内容。
这个括号里提供的内容可以是字符串、文件名和命令。
如果是字符串使用双引号括起来,如:in (“字符串”)。
如果是命令使用单引号括起来,如:in (‘dir c:\’)
如果是文件就直接写入,如:in (file.txt)
但是这里读取文件却使用双引号括了起来,那不是字符串吗?当然不是,在配置参数相中使用usebackq,那么括号中双引号括起来的就是文件。为什么要使用双引号呢?因为在文件夹命名中经常会有空格,如果不用双引号括起来,那么命令将空格前后视为不同的两个文件,所以必须使用引号括起来。
skip=1是跳过第一行。第一行Database是标题所以跳过。
tokens=* 获取整行的数据。
mysqldump 多了一个--single-transaction,该参数保证了在InnoDB存贮引擎下,启动事务,保证数据完整性。"%%i"为了保证数据名在存在空格下也能正确识别。其他引号也是同样的道理。
至此我们第一个任务完成了。
每备份一次都在指定备份目录中创建一个独立的文件夹来保存。
文件夹的命名可以采用:自定义前缀+时间+日期的方式命令。如:MyBackup_2013-04-25 12.00.50.33
创建文件夹名的脚本如下:
REM 备份文件夹前缀。
SET backupFolderPrefix=MyBackup_
for /f "tokens=1,2* delims= " %%i in ('echo %date:/=-%') do set myDate =%%i
SET myTime=%time::=.%
SET myTime=%myTime: =0%
MD %backupFolderPrefix%%myDate% %myTime%
说明:
%date%返回当前系统日期,后面可能跟星期几也可能没有。日期格式可能是斜线分隔,也可能横线分割。如可能的格式(不含引号):“2013-04-25 星期四”,“2013/04/25 星期四”, “2013-04-25”,“13/04/25”等。因为文件夹或文件命名中不能有“/”符号,所以必须把"/"替换掉。%date:/=-%就是返回将日期中的“/”替换为“-”后的结果。我们也不需要后面的星期几,通过for语句获取空格前面部分的日期(之前的版本由于没有考虑到“/”问题,导致有些环境只能创建文件夹,不能正常备份)。
%time%返回当前系统时间。如: “14:50:33.92”,“ 3:23:30.90”。同样文件夹或文件名中不能有“:”号,所以需要替换掉。%time::=.%用“.”替换“:”。时间在0到9点,我们在前面加0,让格式更加统一。0到9点前面没有0但是是有空格的,我们个空格替换成“0”就可以了。%myTime: =0%
至此我们已经完成了目标1和2.接下来我们处理压缩备份。
数据库如果直接备份处理会占用很大空间,通过压缩备份好的.SQL文件,可以节省备份空间。现在很多朋友备份好数据库,把数据文件同步到网盘,这样数据就会更加安全一些。如果数据库被压缩了保存,就能节省网盘的空间。有些网盘对单个文件大小有限制,所以,能多压缩包进行分卷(也就是分包)那就更好了。
对备份好的数据库进行压缩,本文主要采取两种方法。一种系统内置的MakeCab,用来产生CAB压缩包。这个好处在于,系统中不用第三方压缩软件,系统内置,所以比较方便使用。但是,功能没有第三方软件强大,也不能设置压缩密码,而且好像分卷压缩好像有大小限制。第二种采用WinRAR第三方软件来实现压缩,这也是主流和老牌的压缩软件,功能和压缩率都很好。可以设置压缩密码。
压缩备份整体思路是这样的,先将数据库通过上面的方式备份到临时目录中,然后将其压缩到备份目录中。压缩备份如果不分卷,直接装备份的压缩包保存到备份目录,如果是分卷压缩备份,那么在备份目录也是以单独的文件夹中保存多个分卷方式处理,这样便于在压缩目录浏览,也不会感觉很凌乱。
MakeCAB软件的使用方法:这个软件压缩功能比较弱,压缩包内不能有文件夹。而且多个文件打包到一个压缩包中的时候,需要先构建一个打包文件的文件列表,然后根据文件列表进行压缩打包。MakeCAB还有个弊端,在打包多文件时,不能指定压缩包的输出路径,实在是太弱了。只因为他是绿色的,所以才想办法使用它,本来想使用windows自带的ZIP压缩功能,查了半天没有相关命令,实在有点郁闷。 Makecab使用说明:
makecab /f (文件列表) /d compressiontype=(mszip,lzx) /d compressionmemory=(15-21) /d maxdisksize=(分卷大小) /d diskdirectorytemplate=(文件夹模板) /d cabinetnametemplate=(文件名模板)
参数简述:
文件列表:保存了要打包文件的列表。
压缩类型(compressiontype):mszip--压缩率一般。lzx--高压缩率。
压缩级别(compressionmemory):mszip时范围10,21。我测试好像没有什么变化;lzx是,取值范围15,21.
分卷大小(maxdisksize):整数,单位为字节。数值必须是512的整数倍。最大好像是2G(2^31)。
文件夹模板(diskdirectorytemplate):设置在压缩后自动在当前目录产生的文件夹名称规则。特殊字符“*”表示,以1开始递增的数字命名创建文件夹。如:disk*,在有三卷的情况下,那么就会生成disk1,disk2,disk3。如果不带“*”号,那么就只创建一个文件夹。
文件名模板(cabinetnametemplate):和文件夹模板规则一样。如果没有分卷,就可以不用“*”号;如果,启用了分卷压缩,就一定要使用“*”号,否则会导致最后的卷覆盖了前面的分卷。
使用makecab压缩数据库的代码如下:
SET myTempDir=临时目录
SET backDbTmpPath=备份好的数据库文件目录
SET volumePackSize=分卷大小
FOR /f "tokens=1* delims=" %%i in ('DIR "%backDbTmpPath%" /S /B /A-D') do echo "%%i" >> "%myTempDir%\cab_files.lst"
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
在这段代码之前,已经将数据库通过mysqldum命令方式备份到%backDbTmpPath%目录中了,所以只需要将这个目录中的数据压缩后移动到备份目录即可。
代码说明:第一个for语句中的’DIR "%backDbTmpPath%" /S /B /A-D ‘是列出临时数据库备份目录中的文件,也就是备份好的数据库.sql文件,/S /B 就是以完整路径方式列出文件。为什么还需要使用for语句呢?因为这个语句不能为完整文件路径前后加上双引号括起来,如果不加上引号括起来,在使用mackcab压缩的时候,他只会识别空格之前的内容,就会提示找不到文件,那么备份就不会成功。所以使用for语句再循环一遍,在每个完整路径的前后添加双引号,echo “%%i”就达到了目的。
压缩文件列表生成好后,需要将当前目录切换到压缩零时目录中,因为makecab在压缩时只能将压缩结果压缩到当前目录的指定目录下。这句“FOR /F "delims=:" %%i IN ('ECHO%myTempDir%') DO %%i:”用于识别临时目录所在的分区,并切换到这个分区。
然后再根据配置参数是否启用分卷压缩,进行不同的处理。
没有分卷压缩就是,直接压缩然后移动压缩好的,参数请参看双面的说明。
如果启用了分卷压缩,那么有一点非常重要,那就是makecab的分卷必须是512的整数倍。所以为了保证用户在配置分卷大小的时候不用考虑这个数值,我们可以进行一定的处理。因为WinRAR压缩包分卷是1代表的是1k,而在makecab中1024代表分包1k,所以为了保证统一的压缩分卷配置,makecab在压缩时统一将分卷大小*1024。这样既能保证这个数字既能是512的整数倍,也能和WinRAR的压缩卷大小统一。SET /A maxdisksize=%volumePackSize% * 1024。参数“/a”表示运算后面的乘法然后设置给maxdisksize。剩下的处理和前面差不多。
WinRAR压缩功能比较强大,可以直接将备份在临时目录的数据库压缩到数据库备份目录。
使用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%
代码说明:这里采用了根据条件来构建命令的方式。根据不同的参数生成不同的命令行。也就是设置一个变量,把命令和参数都拼凑进去,然后直接输出变量就可运行。
这里用到的RAR参数说明:
a:备份指定目录下所有文件。
-r:备份目录和子目录。
-ep1:不包含完整路径,但是包含压缩目录的下的目录结构。如果是-ep,那么压缩包包涵所有的文件,但是没有目录结构。还有 -ep3,那就是包涵驱动器进去的完整路径了。
-o+:如果文件存在就覆盖。
-m:后面跟压缩等级。0~5的取值范围。
-v:设置卷标大小。整数,1代表1K
-p:压缩包密码
然后就是压缩包名称
最后一个参数是源目录
至此我们已经完成了目标:1,2,4,5,6
解决思路:每次备份都在一个主目录中创建一个备份目录,这样每次备份就有一个独立的目录。然后根据文件夹创建的时间倒序获取文件夹的列表,最新的备份就排到了最前面,那么删除以前的备份,就是删除尾部的文件夹即可。注意如果启用了为卷的压缩备份,那么就删除文件,而不是删除文件夹。
代码如下:
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 ***************************************************************************
说明:首先进行一些校验,只有符合条件了才进行删除。一种是删除文件夹的形式,一种是删除文件的形式。
for 语句中使用的dir命令使用了备份名前缀来进行文件夹或者文件的匹配,这样匹配度更高,可以防止一部分误删除,但是如果其他文件夹或文件名前缀和这个前缀相同,那么就会产生误删除。所以这里请注意。
这里的重要参数/TC /O-D,/TC 表示排序以创建时间作为依据,而不是最后修改时间,这样可以更加有效的控制删除。/O-D表示根据时间进行倒序排序。以前使用的文件夹名称排序方式进行删除,后来考虑到这个排序结果受到日期格式的影响,可能会产生错误的删除,所以最终放弃了这种方式。
保留多少次,skip多少次就可以了。
在备份MySQL的时候,可能成功或者失败。以及一些环境监测的数据都可以写入到日志文件中。
这需要写日志输出到日志文件即可。日志文件存放到备份目录的根目录。同时如果在备份具体数据库出错时,除了需要向日志文件中写入日志,需要在特定备份目录中新建一个备份失败数据库的记录文件。这里文件命名为##BackupFailDbs.txt,这样在备份目录中,排在文件的第一个位置就是他了。方便查找。
echo 日志信息 >> %backupLogFile%
到这里,我们的目标已经完成了1到7了。还有最后一个目标。
环境检测主要是检测文件夹权限,mysql是否可以使用,各个配置项是否正确。
检测是比较简单和冗长的过程,下面代码及时针对文件的权限进行检测。
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的客户端,所以在运行脚本前先安装MySQL。验证本机能不能使用MySQL客户端,开始-->运行-->CMD,然后回车。
如果我们不希望在本机安装MySQL数据库,我们可以再其他已经安装了MySQL数据库的电脑上,找到MySQL的安装目录,在其bin目录下可以找到mysql.exe和mysqldump.exe这两个可执行文件。将他复制过来,放到C:\Windows\就可以了。
完成上面一步之后,我们来进行脚本文件的配置。
在备份MySQL的脚本上右键,选择编辑。这时记事本会打开脚本文件。脚本文件前部分是参数配置(根据实际情况填写):
REM ***************************************************************************
REM 参数配置(参数前后不能有空格)
REM 设置dbhost为主机名或IP地址。设置MySQL数据库的地址,本机不用改。
SET dbhost=localhost
REM 设置登陆mysql数据库的用户名。如果用户名中有"号,请用""代替。
SET dbuser=root
REM 设置登陆mysql的密码。如果密码中有"号,请用""代替。
SET dbpwd=123456
REM 设置backupPath为备份文件存放的路径。注意:文件夹名存在空格不需要引号括起来。警告:此文件夹应为专用目录,最好独立使用,避免删除历史备份时误删数据。
SET backupPath=D:\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=C:\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 ***************************************************************************
配置完后保存并退出,然后双击脚本,运行一下脚本。如果配置不正确,脚本会给出提示。如下图:
如果运行成功,会在备份文件夹中创建日志文件和数据库备份文件。
在确认脚本能正常运行的情况后,就可以将脚本添加到计划任务了
在Windows 2003和 Windows 2008 R2中计划任务稍微有些不同,这里就将两种方式都进行讲解。
开始-->控制面板-->计划任务-->添加计划任务,打开计划任务向导。
打开向导之后,选择“下一步”,之后要求选择程序,在这里选择“浏览”,选择我们配置好的脚本文件。
选择脚本后点击确定,打开如下窗口:
在这个窗口中,任务名可以保持默认,且选择“每天”,数据库每天进行备份,然后点击“下一步”打开如下窗口:
“起始时间”,就是脚本开始运行的时间,根据实际需要配置。一般配置到深夜。运行这个任务选择每天。然后点击“下一步”打开如下窗口:
在这里配置运行脚本的用户。运行脚本的用户,一定要具有读写备份目录和临时的权限,所以用户最好配置成验证脚本时登陆的用户。设置好用户名和密码之后,点击“下一步”,然后点击完成。完成计划任务的配置。
如果出现如下的警告信息:
表明计划任务的服务没有运行,通过以下方法手工开启。
打开“控制面板”,找到“管理工具”,在管理工具下找到“服务”,双击打开。
在服务管理器中,找到“Task Scheduler”这个服务,双击打开,选择启动类型为“自动”,点击“应用”,然后点击“启动”,最后点击“确定”,然后关闭服务管理器。
然后找到添加好的任务计划,右键选择运行,测试一下任务是否能正常运行。
控制面板-->管理工具-->计划任务程序-->双击打开
选择“Microsoft”节点(也可以先创建自己的任务分类),点击“创建基本任务”,打开如下窗口:
名称随意输入,点击下一步。
选择每天,点击下一步。
填写好,每天开始运行脚本的时间,每隔填写1天。然后点击下一步
选择“启动程序”,下一步。
点击浏览,选择脚本文件,另外两个参数留空。然后点击下一步,再点击完成。完成配置向导。同样可以右键我们建好的计划任务选择运行,测试我们的自动备份MySQL脚本是否能正常运行。
配置完成。