windows下利用bat脚本备份mysql和定期清理备份文件

来源:互联网 发布:c语言用什么编程软件好 编辑:程序博客网 时间:2024/05/22 10:39

本文实现的是利用mysqldump备份windows上面的mysql数据库,然后利用脚本清理上上个月的备份文件,保留上个月的备份文件

首先是数据库备份脚本backup.bat

@echo offC:\mysqldump.exe --user=root --password=4234432 gzblapp>D:\db_bak\superstardbbak\sqldata\%date%_gzblapp.sqlC:\mysqldump.exe --user=windows1 --password=34534553 resourcesharing>D:\db_bak\rsdbbak\sqldata\%date%_resourcesharing.sql@echo on  


注意,备份脚本是调用c盘下面的mysqldump.exe来备份,大家根据安装mysql的路径去寻找mysqldump.exe,然后可以像我这样拷贝到c盘根目录下,方便后面使用cmd命令运行,上面备份路径的文件夹提前建好,我上面数据库的命令方式是根据日期加数据库名来命名的,大家根据各自数据库的不同情况来命名,注意我这里是要获取日期格式例如2017-08-09这样的,所以我首先是在装mysql的系统里面修改了时间格式为YYYY-MM-DD这样的,这是比较关键的

数据库清理的脚本clear.bat

@echo offset sqldir1="D:\db_bak\rsdbbak\sqldata"set sqldir2="D:\db_bak\superstardbbak\sqldata"set orgin_mon=%date:~5,2%set orgin_year=%date:~0,4%set d=%date:~8,2%set mon=%orgin_mon%set y=%orgin_year%::若是下一年的1、2月,则先加12,再在后面减去一个月和两个月的时间if %orgin_mon% lss 2 (set /a mon=%orgin_mon%+12 & set/a y=%orgin_year%-1)set monsago=1set twomonsago=2::分别计算前一个月和两个月前的日期,/a就是把字符串看作数字运算set /a m=%mon%-%monsago%set m2=%m%if %m% lss 10 (set m2=0%m%)::若月份是个位数,则在前面加0输出,因为做日期做运算的时候算出的结果是个位的时候是不会在前面带0的,::而日期后面匹配日期来删除文件的时候数据库文件中的日期字符串个位数是带0的,如2017-08-09,当8减去2的时候是等于6,所以必须凑0变成06set /a m1=%mon%-%twomonsago%set m3=%m1%set monsagofile1=%y%-%m2%-%d%_resourcesharing.sqlset twomonsagofile1=%y%-%m3%-%d%_resourcesharing.sqlset monsagofile2=%y%-%m2%-%d%_gzblapp.sqlset twomonsagofile2=%y%-%m3%-%d%_gzblapp.sqlecho %twomonsagofile2%::删除名为sqldir1路径上面备份数据库上上个月之前的所有备份文件for /f "delims=" %%i in ('dir/b/a-d %sqldir1% 2^>nul') do (if %%i geq %twomonsagofile1% (if %%i lss %monsagofile1% (del %sqldir1%\%%i /f /q)))::删除名为sqldir2路径上面备份数据库上上个月所有备份文件for /f "delims=" %%j in ('dir/b/a-d %sqldir2% 2^>nul') do (if %%j geq %twomonsagofile2% (if %%j lss %monsagofile2% (del %sqldir2%\%%j /f /q))):endecho 2秒后退出ping -n 2 127.0.0.1>nulpause


注意,我上面的备份脚本分别设定了两个数据库的备份,一个是resourcesharing,另一个是gzblapp,删除的是上上个月的数据库文件,例如今天是2017-11-15,那么就是删除2017-09-15和2017-10-15之间的数据库文件,然后设置了他们路径,所以下面清理脚本都是设定了两个清理过程,解释在上面脚本注释都写得很清楚了,不清除的在下面评论区问把