最近需要实现在MySqlZ中实现一个定时自动清理过期30天的数据。
原理如下:
1)在MySql中建立存储过程,存储过程中编写清理过期30天的数据SQL,
2)创建event每日或者每周执行一次,内容就是调用我们刚才编写的存储过程。
Create PROCEDURE P_ClearTaskAndMsg
( num INT)
BEGIN
delete from task where DATEDIFF( NOW(),CreateTime)>num;
DELETE from messagecache where DATEDIFF( NOW(),CreateTime)>num;
END
存储过程就不去过多解释了,比较简单。
这里主要讲下MySql中的event;
首先我们可以看下数据库下面所有的Job
show events;
我们也可以看下job是否开启了定时执行
show variables like '%event_scheduler%';
如果没有开启自动行,我们也可以手动开启
set global event_scheduler = on;
接下来我们就来创建我们自己的job
create event e_MonthDelete on schedule every 1 MONTH starts '2017-10-10 00:00:00' on completion not preserve
do call
P_ClearTaskAndMsg (30);
这里我们创建一个event 名叫e_MonthDelete 作为全局的job,每个月执行一次,而job的内容就是来调用我们的存储过程。
这样就可以时间定时执行任务调度,如果你觉得一个月太长你也可以使用every 1 day 来定为每天执行。
下面再为大家提供一些操作event的其他语法:
修改:
ALTER EVENT
e_MonthDelete DO 这里是修改后的内容
删除:
drop event e_MonthDelete