MYSQL EVENT事件无法生效

事件(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.iniLinux系统的 MySQL 的配置文件名是 my.cnf

打开配置文件在 [mysqld] 模块下添加 event_scheduler=onevent_scheduler=1

重新启动MySQL

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

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

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

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

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

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

也就是说,休眠期间,它并没实现监听系统的时间 
posted @ 2021-01-26 13:58  RyanYe  阅读(1692)  评论(0编辑  收藏  举报