mysql定期删除数据

整个过程总共分为三步:

  1. 写存储过程

  2. 写Event事件

  3. 把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
链接:https://www.jianshu.com/p/bbab32eb3323

展开阅读全文

没有更多推荐了,返回首页