在项目中经常会遇到历史数据删除备份的事情,最近参加的一个移动项目使用MYSQL做数据存储,用户正好提到类似的需求。
回想之前在网站上看到过MYSQL中可以支持配置时间调度器,使用这个MYSQL自带的功能来实现用户的要求真是再合适不过了。
需求如下:
px_***1 保存推送消息记录,用户要求每日定时删除5天前的.根据创建时间.
px_***2 记录管理员重要操作日志,用户要求每日定时删除60天前的 .根据创建时间.
px_***3 刷卡记录,删除1年以前的.根据创建时间
px_***2 记录管理员重要操作日志,用户要求每日定时删除60天前的 .根据创建时间.
px_***3 刷卡记录,删除1年以前的.根据创建时间
哈,使用MYSQL的时间调度器来实现这个需求,so easy!!!
按照惯例,搜索MYSQL时间调度器的相关资料,开工。。。。
链接数据库这些基本操作这里略过:
1.查看当前数据库是否启用当前调度事件:
SHOW VARIABLES LIKE 'event_scheduler';
event_scheduler ON<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
2.如果没有开启,使用如下命令
SET GLOBAL event_scheduler = ON;
3.创建对应额度时间调度事件
//删除5天前的
CREATE EVENT px_***1_delete ON SCHEDULE EVERY 1 DAY DO delete from px_pushmessage where create_time<= DATE_SUB(CURDATE(), INTERVAL 5 DAY);
//删除60天前的
CREATE EVENT px_***2_delete ON SCHEDULE EVERY 1 DAY DO delete from px_logs where create_time<= DATE_SUB(CURDATE(), INTERVAL 60 DAY);
//删除1年以前的
CREATE EVENT px_***3_delete ON SCHEDULE EVERY 1 DAY DO delete from px_doorrecord where dt<= DATE_SUB(CURDATE(), INTERVAL 1 YEAR);
4.查看当前已有的event调度
(1)查询mysql.event表;
(2)通过SHOW EVENTS命令;
5.临时关闭开启事件
1) 临时关闭事件
ALTER EVENT e_test DISABLE;
2) 开启事件
ALTER EVENT e_test ENABLE;
备注:如果开启调度命令时遇到权限问题,如:access denied for user 'root'@'%' to database 'pxdb'; 1044
开启对应用户的Event_priv 权限,使用flush privileges;刷新权限后重新登录即可。