以前一直使用复制文件的方式来备份数据库文件,因为这种方式必须停止mysql数据库,比较繁琐,数据量大后,停止mysql的时间也变的很长,影响网站优化,因而参考网上方法写了如下脚本,大鸟就不用看了,如有什么bug或好的方法请留言 !
代码如下 :
@echo off
cls
color 1E
title %date% %time:~,8% 备份MYSQL数据库 BY:REKFAN
::::::::::::::::::::::::以下是需要配置的参数::::::::::::::::::::::::
rem 设置 MySql服务器root账号的密码,特殊符号需要在其前添加两个^,如!、>、|、^、&、* 等
SET MySql_pw=mysql 的root密码
rem 设置 数据库备份目录
SET BAK_Dir=f:db_bak
rem 设置 需要备份的myisam格式数据库,多数据库用逗号分隔
SET BAK_db_myisam=myisam_db1,myisam_db2,myisam_db3
rem 设置 需要备份的innodb格式数据库,多数据库用逗号分隔
SET BAK_db_innodb=innodb_1,innodb_2,innodb_3
rem 设置 自动删除几天的备份,0为删除所有,慎用
SET Bak_Time_ago=5
rem 设置 WinRAR压缩软件的路径
SET RAR_Dir="C:Program FilesWinRARWinRAR.exe"
rem 设置 以2001-01-01格式的日期为子目录(不必修改)
SET BAK_Dir2=%date:~0,4%-%date:~5,2%-%date:~8,2%
rem 设置 备份文件名
SET BAK_FILE=%%i_%BAK_Dir2%.sql
rem 设置 日志文件名
SET LOG_FILE=%BAK_Dir%%BAK_Dir2%MY_DBBAK.log
::::::::::::::::::::::::以上是需要配置的参数::::::::::::::::::::::::
echo. ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
echo. ┃ ┃
echo. ┃ 欢迎使用Mysql自动备份批处理 ┃
echo. ┃ 本代码由rekfan编写 Http://blog.rekfan.com ┃
echo. ┃ ┃
echo. ┃ …………………………………………………………………………………… ┃
echo. ┃ 关于本脚本 ┃
echo. ┃ ::本脚本只需自定义MySql_pw、BAK_Dir、Bak_Time_ago、RAR_Dir的值 ┃
echo. ┃ ::本脚本调用了临时VBS代码进行日期计算 ┃
echo. ┃ ::本脚本为兼容不同的日期格式,调用reg命令,统一设置日期格式 ┃
echo. ┃ ::本脚本自动生成数据库.sql脚本,并自动压缩为.rar文件 ┃
echo. ┃ ::本脚本自动生成日志文件在x:xxxx000-00-00MY_DBBAK.log ┃
echo. ┃ ::本脚本数据库备份路径为x:xxxx000-00-00数据库名_0000-00-00.rar┃
echo. ┃ ::本脚本如果想放在windows计划任务里执行,请去掉脚本里的所有pause ┃
echo. ┃ ::因每个服务器的Mysql环境不一样,备份的核心语句自行更改 ┃
echo. ┃ ::本脚本没有版权,可以任意改为自己想要的效果,转载请勿删除该注释语句┃
echo. ┃ By REKFAN 2011-10-14 ┃
echo. ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
echo.
if not defined MySql_pw (echo MySql_pw 尚未定义!)
if not defined BAK_Dir (echo BAK_Dir 尚未定义!)
if not defined Bak_Time_ago (echo Bak_Time_ago 尚未定义!)
if not defined RAR_Dir (echo RAR_Dir 尚未定义!)
:: 取得当前计算机时间,以 yyyy-MM-dd 格式显示
for /f "skip=2 delims=" %%a in ('reg query "HKEY_CURRENT_USERControl PanelInternational" /v sShortDate') do (
SET RegDateOld=%%a
)
SET RegDateOld=%RegDateOld:~-8%
::通过改变注册表改变计算机的日期格式
reg add "HKEY_CURRENT_USERControl PanelInternational" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
>"%temp%DstDate.vbs" echo LastDate=date()-%Bak_Time_ago%
>>"%temp%DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%DstDate.vbs"') do (
SET DstDate=%%a
)
::删除指定时间前的备份
SETlocal enabledelayedexpansion
echo. 删除 %BAK_Dir2%〔%Bak_Time_ago%〕天前的备份文件
for /f "delims= " %%i in ('dir /ad/b %BAK_Dir%????-??-??') do (
SET t1=%%i
SET t2=!t1:~0,4!!t1:~5,2!!t1:~8,2!
if /i !t2! leq %DstDate% (
DEL /F /A /Q \?%BAK_Dir%!t1!*.*
rd /q /s \?%BAK_Dir%!t1!
echo. 备份文件夹%BAK_Dir%!t1!删除完成!)
)
:: 还原计算机注册表的日期格式
reg add "HKEY_CURRENT_USERControl PanelInternational" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
echo.
echo. 开始以当前日期创建文件夹
if not exist %BAK_Dir%%BAK_Dir2% md %BAK_Dir%%BAK_Dir2%
cd /d %BAK_Dir%%BAK_Dir2%
echo. 开始建立今天(%BAK_Dir2%)的备份
:: 记录时间日志
echo 备份时间:%BAK_Dir2% %time:~0,8% >> %LOG_FILE%
echo /++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> %LOG_FILE%
:: 备份的核心代码
if not defined BAK_db_myisam (goto innodb)
SetLocal DisableDelayedExpansion
for %%i in (%BAK_db_myisam%) do (
mysqldump -hlocalhost -uroot -p%MySql_pw% --default-character-set=GB2312 -R --triggers --hex-blob -x %%i >%BAK_FILE%
rem 以上的参数根据自己的需求更改,部分参数方法请看 http://blog.rekfan.com/?p=57
%RAR_Dir% a %BAK_FILE:~0,-4%.rar %BAK_FILE%
DEL /F /A /Q %BAK_FILE%
echo 数据库【%%i】 已经备份到%BAK_Dir%%BAK_Dir2%%BAK_FILE%.rar >> %LOG_FILE%
)
:innodb
if not defined BAK_db_innodb (goto exitbat)
echo. 开始以当前日期创建文件夹
if not exist %BAK_Dir%%BAK_Dir2% md %BAK_Dir%%BAK_Dir2%
cd /d %BAK_Dir%%BAK_Dir2%
echo. 开始建立今天(%BAK_Dir2%)的备份
SetLocal DisableDelayedExpansion
for %%i in (%BAK_db_innodb%) do (
mysqldump -hlocalhost -uroot -p%MySql_pw% --default-character-set=GB2312 -R --triggers --hex-blob --single-transaction -B %%i >%BAK_FILE%
%RAR_Dir% a %BAK_FILE:~0,-4%.rar %BAK_FILE%
DEL /F /A /Q %BAK_FILE%
echo 数据库【%%i】 已经备份到%BAK_Dir%%BAK_Dir2%%BAK_FILE%.rar >> %LOG_FILE%
)
:exitbat
echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/ >> %LOG_FILE%
echo. 所有备份建立完毕
:: 清除变量
SET MySql_pw=
SET BAK_Dir=
SET Bak_Time_ago=
SET RAR_Dir=
SET BAK_Dir2=
SET BAK_FILE=
SET LOG_FILE=
了解MySQL 备份和恢复(包括MyISAM 和 Innodb存储模式)请看 http://blog.rekfan.com/?p=57
方式一:新建.txt文本,将上面代码复制到文本里,更改文本后缀名为 .bat
因为blog编辑器原因,好多特殊符号自动转义了,可能导致脚本不全,请使用方式二下载!
方式二:直接下载 『请右击此处,选择"目标另存为(A)…"』
⒈ 『开始』-『控制面板』-『计划与任务』-『新建计划』-后面的根据自己的情况进行设置!
如有mysql更好的,效率更高的,备份代码请发邮箱:
mailto : [email protected]
转载请注明:|REKFAN|系统运维| » windows平台mysql定时备份脚本(bat批处理)