mysql定时任务event
由于一些业务需求,我们可能需要定时清除数据库一些废弃的数据,可以使用mysql的存储过程和事件来完成。
下面例子定时清除日志表log中指定天数前的数据
1、创建日志表log
create table if not exists `log` ( `log_id` int(11) not null auto_increment comment '记录id', `user_id` int(11) default null comment '用户id', `op` varchar(128) not null comment '操作类型', `model` varchar(32) default null comment '操作模块', `activity_time` int(10) not null default '0' comment '操作时间', `data` text comment '数据', primary key (`log_id`)) engine=myisam default charset=utf8 comment='用户日志表' auto_increment=1 ;
2、创建事件e_del_logs
create event `e_del_logs` on schedule every 1 day starts '2013-07-30 17:33:43' on completion not preserve enable do call p_del_logs(90);
//上面代码表示从2013-07-30 17:33:43起每一天执行一次p_del_logs这个存储过程,并带上参数
3、建立存储过程p_del_logsdelimiter $$---- 存储过程--create procedure `p_del_logs`(in `date_inter` int)begin delete from log where (to_days(now()) - to_days(from_unixtime(activity_time)))>=date_inter;end$$delimiter ;
//按事件传过来的参数90,删除操作时间90天之前的数据
这样mysql就会定制每天去执行这个任务了。
查看当前是否已开启事件计划(调度器)有3种方法:
1) show variables like 'event_scheduler';2) select @@event_scheduler;3) show processlist;
(二) 开启事件计划(调度器)开关有4种方法:
1) set global event_scheduler = 1;2) set @@global.event_scheduler = 1;3) set global event_scheduler = on;4) set @@global.event_scheduler = on;
键值1或者on表示开启;0或者off表示关闭;
(三) 事件开启与关闭:
开启某事件:alter event e_del_logs on completion preserve enable;关闭某事件:alter event e_del_logs on completion preserve disable;
bitscn.com
