MYSQL EVENT事件无法生效
事件(event)
是MySQL在相应的时刻调用的过程式数据库对象,它由一个特定的线程来管理的,它有两种调度方式。
- 一次性调用。
- 周期性调用。
最近在使用周期性调用时,发现无法生效;我们归纳为两种问题:
- 全局的
event状态默认
是关闭的; - 新建事件的状态为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记录的是启动时间和时间间隔,通过系统时间,三个数值来计算下一个休眠时间,所以在休眠期间内改变系统时间,对休眠时间是无效的。
也就是说,休眠期间,它并没实现监听系统的时间