mysql定时任务(Navicat)

需求

项目上线了,但是需要做个功能去统计每天的系统的使用情况。然后将统计的结果存到表中。

分析

统计的代码很简单,但是这边考虑到项目已经上线,如果把统计的功能放到java代码里面,还需要重新去部署,并且这个功能只是给我们开发自己看的,所以就不打算把功能写在java代码里面了。然后就考虑到用mysql的定时任务。每天固定的时间去统计前一天的数据。然后存到表里面。

在mysql 5.1中新增了一个特色功能事件调度器(Event Scheduler),简称事件。它可以作为定时任务调度器,取代部分原来只能用操作系统的计划任务才能执行的工作。另外,更值得一提的是,mysql的事件可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下是非常实用的。
事件调度器是定时触发执行的,从这个角度上看也可以称作是“临时触发器”。但是它与触发器又有所区别,触发器只针对某个表产生的事件执行一些语句,而事件调度器则是在某一段(间隔)时间执行一些语句。

我用的数据库的版本是5.7.25

实现

先去查下mysql的版本是否支持

SELECT VERSION();

在这里插入图片描述
版本不支持的话,得去升级到相应的版本

查下mysql是否开启事件调度

事件由一个特定的线程来管理。启用事件调度器后,拥有SUPER权限的账户执行SHOW PROCESSLIST就可以看到这个线程了。

SHOW VARIABLES LIKE 'event_scheduler';

在这里插入图片描述
如果值是OFF或者是1;说明没有开启。用SET GLOBAL命令可以开启或关闭事件。将event_scheduler参数的值设置为ON,则开启事件;如果设置为OFF,则关闭事件。(设置系统变量)
我的是已经开启过了,下面贴上开启和关闭的sql;
开启

SET GLOBAL event_scheduler = ON;

关闭

SET GLOBAL event_scheduler = OFF;

注意:通过上面命令开启,是临时开启,mysql重启之后,就没有效果了。如果想要始终开启事件,需要在my.ini(Windows系统)/my.cnf(Linux系统)中添加event_scheduler=on

创建事件
用Navicat
在这里插入图片描述
在开启之后,就可以点图中的那个事件。
在这里插入图片描述
再点新建事件
在这里插入图片描述

  • 定义这块是写需要执行的代码的。也可以先定义好存储过程,或者函数,在这里直接调用也是可以的。
    在这里插入图片描述

  • 定义者:指定当在事件运行时检查访问权限要使用的用户帐号。默认定义者值是运行 CREATE EVENT 语句的的用户。(和DEFINER = CURRENT_USER 相同。)如果给予一个用户值,它应该是一个 ‘user_name’@‘host_name’ 格式的MySQL 帐号(使用与 GRANT 语句相同的格式)。user_name 及 host_name 值都是必须的。

  • 状态:可以创建一个事件但可以用 DISABLE 关键字保持不激活。或者可以用 ENABLE 默认状态,这是激活。

  • ON COMPLETION:正常情况下,一旦事件已过期,它将立即删除。可以通过指定 ON COMPLETION PRESERVE 来重写此性能。ON COMPLETION NOT PRESERVE 只是使默认非持久性的性能明确。
    在这里插入图片描述
    计划就是定时任务执行的周期

  • AT:包含日期和时间,或必须是一个解析为 datetime 值的表达式。使用+INTERVAL 来创建一个事件,它发生在与当前日期和时间有关的将来某个时刻。
    EVERY:在定期间隔重复的行动,可以在 EVERY 子句之后加 interval。(+INTERVAL 与 EVERY 不能同时使用。)

  • STARTS:EVERY 子句还可能包含一个非必须的 STARTS 子句。STARTS 之后的 timestamp 值表示行动应该何时开始重复,也可以用+INTERVAL 间隔指定「由现在开始」的时间量。
    例如:EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK 的意思是「每 3 个月,从现在起一周后开始」。

  • ENDS:EVERY 子句还可包含一个非必须的 ENDS 子句。ENDS 关键字之后的 timestamp 值告诉 MySQL 何时停止重复事件。也可以用+INTERVAL 间隔与 ENDS 一起。
    例如:EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK 相当于「每十二个小时,从现在起三十分钟后开始,并于现在起四个星期后结束」。
    备注:timestamp 是必须发生在未来不能安排在过去的一个事件。

  • interval 区间由两部份组成,数量和时间单位。
    *YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
    WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
    DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND
    在这里插入图片描述
    这个就是注释。
    在这里插入图片描述
    定义好就有预览的sql。
    在这里插入图片描述
    都设置好以后,设置好名字,点击保存。然后到你指定的时间就可以运行了。

猜你喜欢

转载自blog.csdn.net/javaXiaoAnRan/article/details/118333445