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_logs DELIMITER $$ -- -- 存儲過程 -- 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;