定时清理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天前的数据

没有事件前:

 

触发定时事件后:

 

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

posted @ 2023-07-20 10:52  Tozhang  阅读(420)  评论(0编辑  收藏  举报