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记录的是启动时间和时间间隔,通过系统时间,三个数值来计算下一个休眠时间,所以在休眠期间内改变系统时间,对休眠时间是无效的。 

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM