echo. ┃ ::因每个
服务器的Mysql环境不一样,备份的核心语句自行更改 ┃
echo. ┃ ::本脚本没有版权,可以任意改为自己想要的效果,转载请勿删除该注释语句┃
echo. ┃ By
黑客防线网安服务器维护基地 2012-3-12 ┃
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 (RAR_Dir 尚未定义!)
:: 取得当前计算机时间,以 yyyy-MM-dd 格式显示
for /f "skip=2 delims=" %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate') do (
SET RegDateOld=%%a
)
SET RegDateOld=%RegDateOld:~-8%
::通过改变注册表改变计算机的日期格式
reg add "HKEY_CURRENT_USER\Control Panel\International" /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_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul
echo.
:: 记录时间日志
echo 备份时间:%BAK_Dir2% %time:~0,8% >> %LOG_FILE%
echo /++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> %LOG_FILE%
if not defined BAK_db_myisam (goto innodb)
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_myisam%) do (
mysqldump -hlocalhost -uroot -p%MySql_pw% --default-character-set=GB2312 -R --triggers --hex-blob -x %%i >%BAK_FILE%
rem 以上的参数根据自己的需求更改
。
%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%
if exist php.ini DEL /F /A /Q php.ini
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://www.rongsen.com.cn/article/MySQL/2012/0312/7794.html
下载方式:
方式一:新建.txt文本,将上面代码复制到文本里,更改文本后缀名为 .bat
方式二:直接下载 『请右击此处,选择"目标另存为(A)…"』
定时运行:
⒈ 『开始』-『控制面板』-『计划与任务』-『新建计划』-后面的根据自己的情况进行设置!
计划任务可以在运行中运行 AT 命令
。而我们为了设置更多参数和更加直观,可以打开控制面板=>任务计划,并新建一个任务计划(或者向导),任务名字随便定义,如下图:
系统计划任务中设置BAT文件的路径
以下再设置任务的计划(执行时间)
设置系统计划任务的每天执行时间
按照以上图示进行自定义设置即可。例如我设置了 E:\备份\local_mysql.bat 这个批处理脚本每天凌晨2时自动执行。
其实还可以同通过FTP命令将备份好的数据传输到异地的FTP服务器中。这在以后的的文章中会加上这一有趣的功能。