前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL中的事件调度器

MySQL中的事件调度器

作者头像
俺也想起舞
发布2021-10-26 15:51:56
9410
发布2021-10-26 15:51:56
举报

介绍了MySQL中事件调度器的相关使用

MySQL中的事件调度器(Event Schedule)

1.概述

​ 事件调度器(Event Schedule)类似于Linux中的crontab(也就是定时任务),下面介绍事件调度器的基本使用方法

2.使用

2.1 查看事件调度器状态以及相关操作

代码语言:javascript
复制
# 查看状态
show variables like '%event_scheduler%';
+---------------+-----+
|Variable_name  |Value|
+---------------+-----+
|event_scheduler|ON   |
+---------------+-----+
# 开启
SET GLOBAL event_scheduler = 1;
# 关闭
SET GLOBAL event_scheduler = 0;

注意:

  如果是设定事件计划为0 或OFF,即关闭事件计划进程的时候,不会有新的事件执行,但现有的正在运行的事件会执行到完毕。

  对于线上环境来说,使用even时,注意在主库上开启定时器,从库上关闭定时器,event触发所有操作均会记录binlog进行主从同步,从库上开启定时器很可能造成卡库。切换主库后之后记得将新主库上的定时器打开。

2.2 事件的创建与查看

创建语句

代码语言:javascript
复制
CREATE
    [DEFINER = user]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    DO event_body;

schedule: {
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]
}

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
  • DEFINER:指明该event的用户,服务器在执行该事件时,使用该用户来检查权限。
    • 默认用户为当前用户,即definer = current_user
    • 如果明确指明了definer,则必须遵循如下规则:
      • 如果没有super权限,唯一允许的值就是自己当前用户,而不能设置为其他用户
      • 如果具有super权限,则可以指定任意存在的用户;如果指定的用户不存在,则事件在执行时会报错
  • ON SCHEDULE:指定何时执行该事件,以及如何执行该事件
    • AT timestamp:用于创建单次执行的事件,timestamp执行事件执行的时间(如果指定的时间是过去的时间,则会产生一个warning),时间可以是具体的时间字符串或者是一个datetime类型的表达式(如current_timestamp)
      • 如果要指定将来某个时间,直接使用at timestamp,例:at ‘2017-08-08 08:08:08’;
      • 如果要指定将来某个时间间隔,可利用interval关键字(interval关键字可以进行组合)
    • EVERY interval:用于创建重复执行的事件。例如,每分钟执行一次,则可以:EVERY 1 MINUTE。当然,every子句可以指定一个开始事件和结束时间,通过STARTS和ENDS关键字来表示,具体语法与前面类似
  • 通常情况下,如果一个事件过期已过期,则会被立即删除。但是,create event定义中通过on completion preserve子句可以保留已过期的时间。默认:ON COMPLETION NOT PRESERVE,也就是不保存
  • 默认情况下,enable on slave,事件一旦创建后就立即开始执行,可以通过disable关键字来禁用该事件
  • DO子句用于指示事件需要执行的操作,可以是一条SQL语句,也可以是被begin…end包括的语句块,也可以在语句块中调用存储过程

示例,创建一个每10秒插入一条数据的任务

代码语言:javascript
复制
CREATE EVENT sc1
    ON SCHEDULE EVERY 10 SECOND
    DO
    BEGIN
        INSERT INTO scheduler_test1(time) VALUE (now());
    END;

事件查看

代码语言:javascript
复制
# 查看所有事件
SELECT * FROM information_schema.EVENTS;

SHOW EVENTS ;

2.3 事件的修改与删除

修改

代码语言:javascript
复制
ALTER
    [DEFINER = user]
    EVENT event_name
    [ON SCHEDULE schedule]
    [ON COMPLETION [NOT] PRESERVE]
    [RENAME TO new_event_name]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    [DO event_body]

更多的详情可参考13.1.2 ALTER EVENT Statement

删除

代码语言:javascript
复制
DROP EVENT [IF EXISTS] event_name;

3. 参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL中的事件调度器(Event Schedule)
    • 1.概述
      • 2.使用
        • 2.1 查看事件调度器状态以及相关操作
        • 2.2 事件的创建与查看
        • 2.3 事件的修改与删除
      • 3. 参考
      相关产品与服务
      云数据库 SQL Server
      腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档