MySQL之windows下使用批处理定时备份数据库并删除过期数据备份

1.创建批处理文件mysql_backup.bat

rem ******MySQL backup start********
@echo off
::删除超过30天的备份数据
forfiles /p "D:\db_backup" /m *_backup_*.sql -d -30 /c "cmd /c del /f @path"

::定义时间
set "data_time=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%"
::备份数据库命令
F:\DevelopTools\mysql-5.6.36-winx64\bin\mysqldump --opt --single-transaction=TRUE --user=root --password=123456 --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "saiku" > D:\db_backup\saiku_backup_%data_time%.sql
F:\DevelopTools\mysql-5.6.36-winx64\bin\mysqldump --opt --single-transaction=TRUE --user=root --password=123456 --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "taotao" > D:\db_backup\taotao_backup_%data_time%.sql

@echo on
rem ******MySQL backup end********

注:有时直接运行bat文件会出现乱码现象

        解决方案:在文件开头加上  hcp 936

        命令介绍:   chcp 65001   #换成utf-8代码页

                            chcp 936       #换成默认的gbk

                            chcp 437       #美国英语

2.创建定时计划运行mysql备份批处理

    打开:计算机管理--系统工具--任务计划程序    找到创建任务

    

    设置常规属性

    

    设置触发器

    

    设置操作,即需要执行的程序

    

    在任务计划程序库中便可以查看到

    

3.部分命令介绍

    @echo  off      表示在批处理文件执行过程中,只显示结果,而不显示执行的命令

    @echo on       表示批处理文件执行过程中,先显示执行命令,在显示执行结果

    注释命令:

    :: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
    rem 注释内容(不能出现重定向符号和管道符号)
    echo 注释内容(不能出现重定向符号和管道符号)〉nul
    if not exist nul 注释内容(不能出现重定向符号和管道符号)
    :注释内容(注释文本不能与已有标签重名)
    %注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
    goto 标签 注释内容(可以用作说明goto的条件和执行内容)

    :标签 注释内容(可以用作标签下方段的执行内容)

    

   通过forfiles命令找到几天前的数据。

   forfiles的几个参数:

   /P 可是搜索的路径。在我们这里就是要在哪个目录寻找要删除的文件
   /M 根据搜索掩码搜索文件。默认为*,我们要删除某时间以前的文件。我们只关心时间
   /D 文件修改时间在某个时间之前或者之后。-200 表示200天之前的文件

   /C 表示为每个文件执行的命令,这里是要删除该文件所以为"cmd /c del /f @path"

   command string:
   @file - returns the name of the file.
   @fname - returns the file name without extension.
   @ext - returns only the extension of the file.
   @path - returns the full path of the file.
   @relpath - returns the relative path of the file.
   @isdir - returns "TRUE" if a file type is a directory, and "FALSE" for files.
   @fsize - returns the size of the file in bytes.
   @fdate - returns the last modified date of the file.

   @ftime - returns the last modified time of the file.

    

F:\DevelopTools\mysql-5.6.36-winx64\bin\mysqldump --opt --single-transaction=TRUE --user=root --password=123456 --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "saiku" > D:\db_backup\saiku_backup_%data_time%.sql
F:\DevelopTools\mysql-5.6.36-winx64\bin\mysqldump为 MySQL 安装时, mysqldump.exe  文件所在路径, --user=root  指 MySQL 用户名为  root   --password=123456  指 MySQL 密码为 123456 , "saiku"  为要备份的数据库的名称,saiku_backup_%data_time%.sql  为备份文件的名称,这个名称是根据当前的时间规则生成的。

    

比如在windowscmd命令行窗口执行date命令后这个环境变量的值为

当前日期:2014-09-01 星期六 或2014/09/01 周六

那么如下的各个操作的意义如下:
%date:~0,4% 表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取4位字符,结果是2014(年的值)
%date:~5,2%  
表示指针从左向右偏移5位,然后从偏移处开始提取2位字符,结果是03(月的值)
%date:~8,2%  
表示指针从左向右偏移8位,然后从偏移处开始提取2位字符,结果是01(日的值)
%date:~5%    
表示指针从左向右偏移5位,然后提取所有的值
%date:~-5%   
表示指针反方向偏移,从最右端开始,偏移5位,然后从指针处提取左边的所有数值。

注意:“2014-09-01星期六是个字符串,在计算机里指针是从0开始计数的,所以这串字符的指针意义上的第5位是0,月份的0,取两位刚好是03.

同理,比如当前系统的time变量的值如下:

当前时间: 11:36:56.63

那么如下的各个操作的意义如下:
%time:~0,2%  表示从左向右指针向右偏0位,然后从指针偏移到的位置开始提取2位字符,结果是小时字段数值
%time:~3,2%  
表示指针从左向右偏移3位,然后从偏移处开始提取2位字符,结果是分钟字段数值
%time:~6,2%  
表示指针从左向右偏移6位,然后从偏移处开始提取2位字符,结果是秒字段数值

//创建时间命名的文件夹

md d:\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%


猜你喜欢

转载自blog.csdn.net/qq_37725650/article/details/80507147