定时清理mysql表数据

  因为我们开发的系统,需要记录操作日志,短短的时间内,整个日志表就会有很多数据进来,有些数据基本没有啥用了 ,于是需要写一个定时任务来定期处理这些数据(业务要求数据只保留三个月),所以我开始第一时间想到两个方案:

  一:是在代码中写一个定时器,每天12点自动删除日志表中的数据

  二:是使用mysql 自带的事件,

 最后综合考虑下 还是使用mysql的事件 因为代码少,并且是mysql自带的,那处理mysql数据再好不过了.下面记录下,真的超级简单,网上有很多版本,什么写一个存储过程, 在写一个事件定时调存储过程删除,我觉得对我而言蛮麻烦的,我就三行代码搞定.(针对自己的业务需求,找一个最合适的)

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天前的数据  

没有事件前:

触发定时事件后:

可以看到我们的定时任务成功了!!!!

猜你喜欢

转载自blog.csdn.net/FindHuni/article/details/108482862