MYSQL EVENT事件无法生效

发布时间:2023年12月18日

事件(event)是MySQL在相应的时刻调用的过程式数据库对象,它由一个特定的线程来管理的,它有两种调度方式。

  1. 一次性调用。
  2. 周期性调用。

最近在使用周期性调用时,发现无法生效;我们归纳为两种问题:

  1. 全局的event状态默认是关闭的;
  2. 新建事件的状态为DISABLE;

解决方案

问题1:将全局event状态修改为:开启

进入MySQL命令行模式

查看event是否开启:show variables like 'event_scheduler';
这时你会发现 event_scheduler 的值是 OFF
mysql> show variables like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+


临时开启?event?事件:set global event_scheduler=1;


执行完以上命令,再次查看event状态,可以看到event_scheduler的值变成ON,此时event的状态为“开启”;

注意:此方法只是临时开启event状态,当MySQL重新启动时,event状态会改变回原来的“OFF”,即“关闭状态”;


永久开启?event?事件:修改MySQL配置文件


windows 系统的 MySQL的配置文件名是 my.ini ;Linux系统的 MySQL 的配置文件名是 my.cnf;
打开配置文件在 [mysqld] 模块下添加 event_scheduler=on 或 event_scheduler=1;
重新启动MySQL

问题2:新建事件的状态为改为ENABLE;

修改完之后,event事件生效了。

经过多次测试”周期性调用“事件:发现每1秒、每一分钟执行一次都成功,当测试每天执行一次时,发现并没有生效。

后来发现,我测试”每天执行一次时“是修改系统时间去测试的,问题就出现在这里。

event事件并不是每时每刻都在扫描,而是采用休息休眠。 休眠一段时间后,等待下一次执行,再重新获取新的系统时间,再重新计算。 

总结来说,Mysql记录的是启动时间和时间间隔,通过系统时间,三个数值来计算下一个休眠时间,所以在休眠期间内改变系统时间,对休眠时间是无效的。 

也就是说,休眠期间,它并没实现监听系统的时间 

文章来源:https://blog.csdn.net/shileimohan/article/details/134998290
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。