注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

MySQL事件调度器(event_scheduler)

MySQL 彭东稳 188次浏览 未收录 0个评论

一、事件介绍

事件调度器是定时触发执行的,在这个角度上也可以称作是”定时的触发器”。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行特定的语句/存储过程。事件是由一个特定的线程来管理的,也就是所谓的”事件调度器”。启用事件调度器后,拥有SUPER权限的账户执行SHOW PROCESSLIST就可以看到这个线程了。通过设定全局变量event_scheduler的值即可动态的控制事件调度器是否启用。

在使用这个功能之前必须确保event_scheduler已开启。

设置成功之后,执行show proceslist。

进程中会出现一个event_scheduler的用户用于执行调度事件。

二、创建事件

1. 创建一个任务每隔两秒向表插入数据

2. 10天后清空evnt表

3. 2018年4月5日12点整清空evnt表

4. 2天后开启每天定时清空evnt表,一年后停止执行

[on completion [not] preserve] 默认是on completion not preserve即计划任务执行完毕后自动drop该事件;on completion preserve则不会drop掉 。

5. 每天定时清空evnt表(只执行一次,任务完成后就终止该事件)

[enable | disenable]可是设置该事件创建后状态是否开启或关闭,默认为enable。 [commet ‘commet’]可以给该事件加上注释。

三、修改事件

关闭事件

开启事件

将每天清空evnt表改为5天清空一次

四、删除事件

五、主从复制对事件的影响

对于主从架构的数据库要注意将从库的任务调度关闭,以防止在主库执行了之后,从库又重复在备库进行调度evnet。

在主库创建:

在从库查看:

新创建的event在master上的状态是ENABLED,在slave上的状态是SLAVESIDE_DISABLED。

另外,在主库上修改event的status状态也不会改变slave上面的状态。

总结一下主从对event_scheduler的影响:

1. 在主库上新建event,在slave上event的状态为SLAVESIDE_DISABLED没有影响。

2. 通过xtrabackup恢复出来的从库,如果有events那么需要在slave上把event_scheduler设置为off,并且检查 events的status状态,如果是enable,则需要关闭事件调度器。

3. 当主从发生切换时,需要人工(或者有配套的机制)来维护event的状态。新主库

4. 在主库上对event的进行状态修改不影响从库的状态。

<推荐阅读>

https://dev.mysql.com/doc/refman/5.7/en/create-event.html

https://dev.mysql.com/doc/refman/5.7/en/alter-event.html


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (0)or分享 (0)
关于作者:

您必须 登录 才能发表评论!