数据库数据整合

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/supwuq/article/details/88014756

系统开发一段时间上线之后,由于功能业务复杂,数据量较大,为了监控也是运维一部分,需要对数据库的数据进行检查,整合。一般会对一些关键数据进行定期检查,对于库存之类的,基本是每天都需要检查整合。每天可以人工执行一些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/bin
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set file=%year%%month%%day%
set filename=%year%%month%%day%.txt
set character_set_database=GBK
md "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/bin
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set file=%year%%month%%day%
set filename=%year%%month%%day%.sql
set character_set_database=GBK
md "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 ... 坑哇。  

猜你喜欢

转载自blog.csdn.net/supwuq/article/details/88014756