一、引言
最近要将数据库里每小时记录的原始数据分别按照天、周、月进行处理,然后用于统计分析,抽象出来就是一个定时任务处理的功能,然后自己寻找了一些方法,有了这篇文章==
二、定时任务方法
1、操作系统层面
通常我们的服务器主要基于两大平台,一个windows server,它的定时任务系统有提供的。Linux下也有,通常流行的是cronta,但是crontab的定时任务通常定时操作脚本这样的文件,而直接定时操作数据库的就比较麻烦了。但是也有解决办法,就是在服务器端写一个get请求url,在后台里完成要定时完成的数据库操作,这样我们只要实现定时访问该接口就行了。其实这个我也没怎么用过,感觉不是特别能定制,so不太推荐使用。
2、程序层面
这个层面大家应该都懂的吧,想怎么做就怎么做,可以为所欲为,无非就是用个定时的库,然后写一个定时处理的程序把结果插入数据库==这个定制程度最高,不过付出的成本也最高==
3、数据库层面
一言以蔽之,mysql从5.0开始自带了定时事件操作==其实跟trigger有点类似,都是执行的一些存储过程(函数),只不过调用的时候一个是根据操作,一个是根据时间==
三、mysql定时任务event实现
1、开启事件计划功能
- 查看是否开启
show variables like '%event_sche%';
- 开启事件计划
set global event_scheduler=1;
如果要想数据库重启后也可以让event_scheduler开启,则需要在配置文件my.ini的设置。修改如下,然后重启mysql服务即可。
[mysqld]
event_scheduler=ON //这一行加入mysqld标签下
2、创建存储过程
这个大家就都比较熟悉了
create procedure test()
begin
INSERT INTO qwe (number,time) SELECT SUM(number),NOW() FROM ttest where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= DATE(time);
end
3、创建定时任务
每一秒钟运行一次上面的存储过程
create event first_event
on schedule every 1 second
on completion preserve disable
do call test();
4、开启定时任务
alter event second_event on completion preserve enable;//开启定时任务
alter event second_event on completion preserve disable;//关闭定时任务
然后比较复杂的事件设定功能大家可以去看下官网点击打开链接,这里只是介绍下基本使用,自己用还得结合业务哈==
四、总结
- 数据库中定时任务处理需求引入;
- 定时任务的方法;
- mysql中event事件定时任务步骤;