系统开发一段时间上线之后,由于功能业务复杂,数据量较大,为了监控也是运维一部分,需要对数据库的数据进行检查,整合。一般会对一些关键数据进行定期检查,对于库存之类的,基本是每天都需要检查整合。每天可以人工执行一些SQL,但是就会很麻烦。不够自动化。手里拿着一台电脑,竟然还要自己每天去手动。于是调查了一下想设置些东西,让sql 每天自己运行,并且把运行结果以文件形式输出。要达到的大致目标找到了,于是就开启了学习之路。下面记录一些这过程中的学习关键点。
1:MySQL执行Select语句将结果导出到文件的方法
看了下语句写法不复杂,于是自己写了个
SELECT SUM(CommNum)as s from t_stock into outfile 'H://yhhsDataBack/1.sql'; ;
运行报错:The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
猜测是数据库安全参数设置什么的导致不能导出文件,百度这个错误,的确实是的。 也就是说,导出到什么路径,数据库已经默认了。 不能随便导出。当然也就两种方法,一种是查看默认路径是什么
show variables like '%secure%';
第三个参数就是允许默认的导出路径。所以改为
SELECT SUM(CommNum)as s from t_stock into outfile 'C:\ProgramData\MySQL\MySQL Server 5.7\Uploads/1.sql';
就可以正常运行。或者自己去修改MySQL的安装配置,修改这个路径参数就行。但是很麻烦,下次你换个文件,又要修改配置重启mysql .所以推荐方法2
2:上面是运行mysql 自带的方法来实现。进一步来看,写个bat文件制定输出文件也可以实现.
@echo off cd C:/Program Files/MySQL/MySQL Server 5.7/binset year=%date:~0,4%set month=%date:~5,2%set day=%date:~8,2%set file=%year%%month%%day%set filename=%year%%month%%day%.txtset character_set_database=GBKmd "E:/Yhhs/StockBackups/%file%"mysql.exe -h localhost -uroot -ptest123 -e"SELECT SUM(CommNum)as s from t_stock" yhhs > E:/Yhhs/StockBackups/%file%/%filename%pause
实现了按照日期时间自动创建文件。实现了输出文件的任意性。
cd set md pause 这些都是简单的cmd 命令不解释了。解释下倒数第二行参数数据库连接信息
-h 数据库服务器地址(不是你的客户端地址)
-u 用户名
-p 密码
-e 要执行的sql 语句
yhhs 数据库名称
> 输出的文件
以上bat 文件写好。将bat 文件加入到系统的定时计划就行。 那天都是执行一次那个sql语句输出一个新的文件。
在查找这个功能的时候,感觉到bat里面的命令和cmd 很想 就去百度了下bat 和cmd 的区别。 目前我的理解是,bat 和cmd 没什么区别,只是执行不同。 双击bat 文件,系统就直接运行这个bat .也是一行一行的运行里面的cmd命令。理解为cmd 要打开dos 界面实时写实时运行 ,但是bat 可以把cmd命令存起来,要用的时候,双击就好了。
好了,再提供一个数据库备份的bat 吧,用的是mysql 自带的mysqldump.exe 这个程序。
@echo off cd C:/Program Files/MySQL/MySQL Server 5.7/binset year=%date:~0,4%set month=%date:~5,2%set day=%date:~8,2%set file=%year%%month%%day%set filename=%year%%month%%day%.sqlset character_set_database=GBKmd "E:/Shhs/Backups/%file%"mysqldump.exe --opt -Q shhs -uroot -ptest123 > E:/Shhs/Backups/%file%/%filename%
你发现,除了mysql.exe 和mysqldump.exe之外没什么区别,只是mysqldump 没有写sql语句,select * from。。。。。 的却是的,其实你可以理解为,mysqldump已经写好了这个语句。 同样的输出就OK了。
回来更新下。 在windos 系统下面有个很坑的东西。关于盘符。 原因是我把写的bat 由桌面放到其他E盘,点击运行,一直运行失败找不到mysql.exe 可是不是cd c:/ 这可是绝对路径哇 。 唉 cd 这个命令 的确是进去某个文件,但是只限于同一个盘符,意思是,你当前在E盘 不能直接用cd c:进C盘的文件 必须要先C:切换盘符 然后 cd ... 坑哇。