windows下批处理实现mysql备份、压缩、30天以上的备份删除(特殊需求:每个月1号的备份不删除)
首先本文也是从多篇文章凑来的,本来也打算设为私密的,但是想到这个特殊需求好像没看到有什么好办法,就提供个简单的思路吧。
这是基础文章。
rem 删除7天前的备份cd D:\db_bak\qd_web_project\dump
forfiles /m *.rar /d -7 /c "cmd /c del @file /f"rem 生成备份数据库
cd C:\Program Files\mysql\Mysql Server 5.6\bin
SET filePath=D:\databackup\db\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%
SET sqlPath=%filePath%.sql
SET rarPath=%filePath%.rar
MYSQLdump.exe dbname -P 3306 -uroot -proot > %sqlPath%rem 压缩备份的数据库文件
"D:\Program Files (x86)\WinRAR\WinRAR.exe" a -ibck -m5 %rarPath% %sqlPath%rem 删除数据加文件
del %sqlPath%
%date:~0,4% 表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取4位字符,结果是2014(年的值)
%date:~5,2% 表示指针从左向右偏移5位,然后从偏移处开始提取2位字符,结果是03(月的值)
%date:~8,2% 表示指针从左向右偏移8位,然后从偏移处开始提取2位字符,结果是01(日的值)
实战:
REM 首先将超过30天的rar格式备份文件删除,再判断当前时间是否为1号,如果是,备份的文件是gz格式的,如果不是就备份成rar
@echo off
cd E:\databackup\nnyc
forfiles /m *.rar /d -30 /c "cmd /c del @file /f"
cd E:\MySQL\bin
SET "str=%date:~8,2%"
SET filePath=E:\databackup\nnyc\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%
SET sqlPath=%filePath%.sql
if "%str%"=="01" (SET rarPath=%filePath%.gz) else SET rarPath=%filePath%.rar
mysqldump --opt --single-transaction=TRUE --skip-lock-tables=TRUE --quick=TURE --user=root --password=root --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --routines --events "dbname" > %sqlPath%
"C:\Program Files\WinRAR\WinRAR.exe" a -ibck -m5 %rarPath% %sqlPath%
del %sqlPath%@echo on
思路就是要求的那天就压缩成其他格式,删除就可以放开手去删了,因为看了forfiles的用法,想不到怎么通过日期是否为1号去判断,就换了个思路。