项目开发19:定时删除30天以前的日志

284 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情

定时删除30天以前的日志

业务分析

定时删除日志是一项很常用的功能。当记录的日志太多时,会使磁盘空间每况愈下。因此,定时删除日志是十分必要的。这项功能可以在后台中编写也可以直接通过event事件进行相应处理。

业务实现

可以直接在navicat中进行相关操作。在navicat中的表中,点击其他下拉框中的事件,即可进行设置。在这里,我们是想要定时删除30天以前的日志。那么就要先分析sql语句如何编写。DATE_SUB(NOW(),INTERVAL 30 DAY)代表的含义就是从现在的时间距离30天以内的时间,也就是说只要日志记录时间小于上面这个时间,那么就要将这条日志进行删除。这其实还是在考我们对sql语句和对sql中的函数的用法,

当前时间点为2017年3月9日 23:48,我们设置23:50执行删除eastmount数据操作。其中SQL语句的Event代码如下: 完整的sql语句如下

delete from log where DATE(time) <= DATE(DATE_SUB(NOW(),INTERVAL 30 DAY)) DATE(time)代表了现在的时间。

在navicat的事件管理中,还可以进行每隔多久进行一次日志清理的任务。像上面这个任务,可以进行每隔一日进行检查。要是有过期的就进行删除。间隔时间太短会影响性能,太长会达不到应有的效果。

注意:在使用之前要首先通过Navicat for MySQL查看Event事件是否开启,具体代码: show variables like '%sche%';

如果没有开启,需要数据库超级权限设置。

[sql]  view plain copy

set global event_scheduler =1; 其中event_scheduler为ON表示开启,OFF表示关闭,一般都是处于ON开启状态的