整个过程总共分为三步:
-
写存储过程
-
写Event事件
-
把Event事件设置成Enable并打开事件任务
存储过程
首先定义一个存储过程,del_data,传入一个int参数就是保留的数据天数,过程的内容就是删除big_data_service.song_topn_rt 表保留天数外的数据。
简单来说,就是多少天之后删除该数据
CREATE DEFINER=`root`@`%` PROCEDURE `del_data`(IN `date_inter` int)
BEGIN
delete from big_data_service.song_topn_rt where insertTime < date_sub(curdate(), interval date_inter day);
delete from big_data_service.singer_topn_rt where insertTime < date_sub(curdate(), interval date_inter day);
END
写Event事件
定义del_event,在Event事件中定义事件执行的开始事件和频率,事件设置成Enable,并且到点的时候执行del_data存储过程(传进去的天数是30天)。
新建一个sql文件
create event del_event
on schedule
EVERY 1 day
STARTS '2017-04-12 00:00:00'
ON COMPLETION PRESERVE ENABLE
do call del_data(30)
从2017.4.12起开始每天执行一次这个时间
ON COMPLETION [NOT] PRESERVE
:表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件,如果设置了该参数,执行完毕后,事件将被删除,不想删除的话可以设置成ON COMPLETION PRESERVE)
;
ENABLE:表示系统将执行这个事件;
打开事件
方法一:执行mysql语句
set global event_scheduler = on
确认是否开启
SHOW VARIABLES LIKE 'event_scheduler';
方法二:
虽然这里用set global event_scheduler = on语句开启了事件,但是每次重启电脑。或重启mysql服务后,会发现,事件自动关闭(event_scheduler=OFF),所以想让事件一直保持开启,最好修改配置文件,让mysql服务启动的时候开启时间,只需要在my.ini配置文件的[mysqld]部分加上event_scheduler=ON 即可,如下:

执行事件
source on_schedule_delete.sql
show events 展示事件

DROP EVENT del_event 删除事件
参考文档
mysql的event schedule 计时执行
http://blog.csdn.net/small____fish/article/details/7621160
网友评论