阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL定时任务(event事件)

392次阅读
没有评论

共计 4458 个字符,预计需要花费 12 分钟才能阅读完成。

1. 事件简介

事件(event)是 MySQL 在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。

事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。

事件取代了原先只能由操作系统的计划任务来执行的工作,而且 MySQL 的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux 下的 CRON 或 Windows 下的任务计划)只能精确到每分钟执行一次。

2 事件的优缺点
2.1 优点
一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。
可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。

2.2 缺点
定时触发,不可以调用。

3 创建事件

一条 create event 语句创建一个事件。每个事件由两个主要部分组成,第一部分是事件调度(eventschedule,表示事件何时启动以及按什么频率启动;

第二部分是事件动作(event action),这是事件启动时执行的代码,事件的动作包含一条 SQL 语句,它可能是一个简单地 insert 或者 update 语句,也可以使一个存储过程或者
benin…end 语句块,这两种情况允许我们执行多条 SQL。

一个事件可以是活动(打开)的或停止(关闭)的,活动意味着事件调度器检查事件动作是否必须调用,停止意味着事件的声明存储在目录中,但调度器不会检查它是否应该调用。在一个事件创建之后,它立即变为活动的,一个活动的事件可以执行一次或者多次。

3.1 创建语法如下

CREATE 
        [DEFINER = { user | CURRENT_USER }] 
        EVENT 
        [IF NOT EXISTS] 
        event_name 
        ON SCHEDULE schedule 
        [ON COMPLETION [NOT] PRESERVE] 
        [ENABLE | DISABLE | DISABLE ON SLAVE] 
        [COMMENT 'comment'] 
        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} 
     

名词解释:
event_name:创建的 event 名字(唯一确定的)。
ON SCHEDULE:计划任务。
schedule: 决定 event 的执行时间和频率(注意时间一定要是将来的时间,过去的时间会出错),有两种形式 AT 和 EVERY。
[ON COMPLETION [NOT] PRESERVE]:可选项,默认是 ON COMPLETION NOT PRESERVE 即计划任务执行完毕后自动 drop 该事件;ON COMPLETION PRESERVE 则不会 drop 掉。
[COMMENT ‘comment’]:可选项,comment 用来描述 event;相当注释,最大长度 64 个字节。
[ENABLE | DISABLE]:设定 event 的状态,默认 ENABLE:表示系统尝试执行这个事件,DISABLE:关闭该事情,可以用 alter 修改
DO event_body: 需要执行的 sql 语句(可以是复合语句)。CREATE EVENT 在存储过程中使用时合法的。

3.2 开启关闭事件调度器
3.2.1 MySQL 事件调度器 event_scheduler 负责调用事件,它默认是关闭的。这个调度器不断地监视一个事件是否要调用,要创建事件,必须打开调度器。

mysql> show variables like '%event_scheduler%'; 
+-----------------+-------+ 
| Variable_name   | Value | 
+-----------------+-------+ 
| event_scheduler | OFF   | 
+-----------------+-------+ 

3.2.2 开启事件调度器
通过命令行
可通过如下任何一个命令行

SET GLOBAL event_scheduler = ON; 
SET @@global.event_scheduler = ON; 
SET GLOBAL event_scheduler = 1; 
SET @@global.event_scheduler = 1; 

通过配置文件 my.cnf

event_scheduler = 1 #或者 ON

查看调度器线程

mysql> show processlist; 
+----+-----------------+-----------+------+---------+------+------------------------+------------------+ 
| Id | User            | Host      | db   | Command | Time | State                  | Info             | 
+----+-----------------+-----------+------+---------+------+------------------------+------------------+ 
|  2 | root            | localhost | NULL | Query   |    0 | NULL                   | show processlist | 
|  3 | event_scheduler | localhost | NULL | Daemon  |    6 | Waiting on empty queue | NULL| 
+----+-----------------+-----------+------+---------+------+------------------------+------------------+ 

3.2.3 关闭事件调度器
通过命令行
可通过如下任何一个命令行

SET GLOBAL event_scheduler = OFF; 
SET @@global.event_scheduler = OFF; 
SET GLOBAL event_scheduler = 0; 
SET @@global.event_scheduler = 0; 

通过配置文件 my.cnf
在 [mysqld] 下增加

event_scheduler = 0 #或者 OFF,DISABLED

查看调度器线程

mysql> show processlist; 
+----+------+-----------+------+---------+------+-------+------------------+ 
| Id | User | Host      | db   | Command | Time | State | Info             | 
+----+------+-----------+------+---------+------+-------+------------------+ 
|  2 | root | localhost | NULL | Query   |    0 | NULL  | show processlist | 
+----+------+-----------+------+---------+------+-------+------------------+

3.3 例如:创建一个表记录每次事件调度的名字和事件戳
3.3.1 创建测试表

mysql> drop table if exists events_list; 
mysql> create table events_list(event_name varchar(20) not null, event_started timestamp not null); 

3.3.2 创建事件 1(立即启动事件)

create event event_now  
on schedule  
at now()  
do insert into events_list values('event_now', now()); 

查看事件执行结果

mysql> select * from events_list; 
+------------+---------------------+ 
| event_name | event_started       | 
+------------+---------------------+ 
| event_now  | 2014-07-01 04:06:40 | 
+------------+---------------------+ 

3.3.3 创建事件 2(每分钟启动事件)

create event test.event_minute  
on schedule  
every  1 minute   
do insert into events_list values('event_now', now()); 

查看事件执行结果

mysql> select * from events_list; 
+------------+---------------------+ 
| event_name | event_started       | 
+------------+---------------------+ 
| event_now  | 2014-07-01 04:26:53 | 
| event_now  | 2014-07-01 04:27:53 | 
| event_now  | 2014-07-01 04:28:53 | 
+------------+---------------------+ 

3.3.3 创建事件 3(每秒钟启动事件)

CREATE event event_now  
ON SCHEDULE  
EVERY 1 SECOND
DO INSERT INTO event_test VALUES(1); 

3.3.4 创建事件 4(每秒钟调用存储过程)

CREATE DEFINER=`root`@`localhost` EVENT `eventUpdateStatus` 
ON SCHEDULE EVERY 1 SECOND 
STARTS '2017-11-21 00:12:44' 
ON COMPLETION PRESERVE 
ENABLE 
DO call updateStatus()

3.4 注意:
默认创建事件存储在当前库中,也可显示指定事件创建在哪个库中
通过 show events 只能查看当前库中创建的事件
事件执行完即释放,如立即执行事件,执行完后,事件便自动删除,多次调用事件或等待执行事件可以查看到。
如果两个事件需要在同一时刻调用,mysql 会确定调用他们的顺序,如果要指定顺序,需要确保一个事件至少在另一个事件 1 秒后执行
对于递归调度的事件,结束日期不能在开始日期之前。
select 可以包含在一个事件中,然而他的结果消失了,就好像没执行过。

4 查看事件
查看当前所在库的事件
mysql> show events;
查看所有事件
mysql> select * from mysql.event;

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4458字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7977988
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装2026年最强个人助理ClawdBot、完整安装教程

如何安装 2026 年最强个人助理 ClawdBot、完整安装教程 一、前言 学不完,根本学不完!近期,一款名...