定时清理mysql表数据
因为我们开发的系统,需要记录操作日志,短短的时间内,整个日志表就会有很多数据进来,有些数据基本没有啥用了 ,于是需要写一个定时任务来定期处理这些数据(业务要求数据只保留三个月),所以我开始第一时间想到两个方案:
一:是在代码中写一个定时器,每天12点自动删除日志表中的数据
二:是使用mysql 自带的事件,
最后综合考虑下 还是使用mysql的事件 因为代码少,并且是mysql自带的,那处理mysql数据再好不过了.下面记录下,真的超级简单,网上有很多版本,什么写一个存储过程, 在写一个事件定时调存储过程删除,我觉得对我而言蛮麻烦的,我就三行代码搞定.(针对自己的业务需求,找一个最合适的)
转载:https://blog.csdn.net/FindHuni/article/details/108482862
1.打开mysql ,查看你的定时任务开关是否开启
SHOW VARIABLES LIKE 'event_scheduler'
如果value是off 需要你打开一下
SET GLOBAL event_scheduler = ON
2.写定时任务的事件
DELIMITER $$
DROP EVENT IF EXISTS deleteLog;
CREATE EVENT deleteLog
ON SCHEDULE EVERY 300 SECOND
ON COMPLETION PRESERVE
DO BEGIN
delete from sys_log where TO_DAYS(now())-TO_DAYS(log_time)>90;
END$$
DELIMITER ;
详细说明:
SCHEDULE EVERY 300 SECOND : 每5分钟执行一次
还有很多比如: YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND (根据自己要求来)
sys_log : 你要操作的表
log_time : 表中含有事件的字段(必须有含有时间的字段 不然没有办法对比)
TO_DAYS(now())-TO_DAYS(log_time)>90 : 当前时间减去字段(log_time) 时间 大于 90 就 删除这些数据
3.查看事件
select * from mysql.event;
4. 测试
我当时特意修改看时间 删除10天前的数据
没有事件前:
触发定时事件后:
可以看到我们的定时任务成功了!!!!