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
//创建时间命名的文件夹
md d:\%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%