带你了解MySQL中的事件调度器EVENT
亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《带你了解MySQL中的事件调度器EVENT》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下MySQL事件调度器、event,希望所有认真读完的童鞋们,都有实质性的提高。
MySQL中的事件调度器,EVENT,也叫定时任务,类似于Unix crontab或Windows任务调度程序。
EVENT由其名称和所在的schema唯一标识。
EVENT根据计划执行特定操作。操作由SQL语句组成,语句可以是BEGIN…END语句块。EVENT可以是一次性的,也可以是重复性的。一次性EVENT只执行一次,周期性EVENT以固定的间隔重复其操作,并且可以为周期性EVENT指定开始日期和时间、结束日期和时间。(默认情况下,定期EVENT在创建后立即开始,并无限期地继续,直到它被禁用或删除。)
EVENT由一个特殊的事件调度器线程执行,用SHOW PROCESSLIST可以查看。
root@database-one 13:44: [gftest]> show variables like '%scheduler%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | OFF | +-----------------+-------+ 1 row in set (0.01 sec) root@database-one 13:46: [gftest]> show processlist; +--------+------+----------------------+-----------+---------+------+----------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +--------+------+----------------------+-----------+---------+------+----------+------------------+ ...... +--------+------+----------------------+-----------+---------+------+----------+------------------+ 245 rows in set (0.00 sec) root@database-one 13:46: [gftest]> set global event_scheduler=1; Query OK, 0 rows affected (0.00 sec) root@database-one 13:47: [gftest]> show variables like '%scheduler%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | ON | +-----------------+-------+ 1 row in set (0.01 sec) root@database-one 13:47: [gftest]> show processlist; +--------+-----------------+----------------------+-----------+---------+------+------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +--------+-----------------+----------------------+-----------+---------+------+------------------------+------------------+ ...... | 121430 | event_scheduler | localhost | NULL | Daemon | 33 | Waiting on empty queue | NULL | ...... +--------+-----------------+----------------------+-----------+---------+------+------------------------+------------------+ 246 rows in set (0.01 sec)
可以看到,默认情况下,MySQL的EVENT没有打开,通过设置event_scheduler参数来打开或者关闭EVENT。打开后就会多一个event_scheduler,这个就是事件调度器线程。
除了打开和关闭,还可以禁用,要禁用EVENT,请使用以下两种方法之一:
- 启动MySQL时用命令行参数
--event-scheduler=DISABLED
- 在MySQL配置文件中配置参数
event_scheduler=DISABLED
MySQL 5.7中创建EVENT的完整语法如下:
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}
详细说明可以参考官网https://dev.mysql.com/doc/refman/5.7/en/create-event.html
我们通过一个实例来验证下。
1)创建一张表。
root@database-one 13:47: [gftest]> create table testevent(id int auto_increment primary key,create_time datetime); Query OK, 0 rows affected (0.01 sec) root@database-one 13:50: [gftest]> select * from testevent; Empty set (0.00 sec)
2)创建一个EVENT,每3秒往表中插一条记录。
root@database-one 13:50: [gftest]> create event insert_date_testevent on schedule every 3 second do
-> insert into testevent(create_time) values(now());
Query OK, 0 rows affected (0.01 sec)
root@database-one 13:53: [gftest]> show events \G
*************************** 1. row ***************************
Db: gftest
Name: insert_date_testevent
Definer: root@%
Time zone: +08:00
Type: RECURRING
Execute at: NULL
Interval value: 3
Interval field: SECOND
Starts: 2020-03-26 13:53:10
Ends: NULL
Status: ENABLED
Originator: 1303306
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
1 row in set (0.00 sec)
3)过一会,去表中查询数据。
root@database-one 13:53: [gftest]> select * from testevent; +----+---------------------+ | id | create_time | +----+---------------------+ | 1 | 2020-03-26 13:53:10 | | 2 | 2020-03-26 13:53:13 | | 3 | 2020-03-26 13:53:16 | | 4 | 2020-03-26 13:53:19 | | 5 | 2020-03-26 13:53:22 | | 6 | 2020-03-26 13:53:25 | | 7 | 2020-03-26 13:53:28 | | 8 | 2020-03-26 13:53:31 | | 9 | 2020-03-26 13:53:34 | | 10 | 2020-03-26 13:53:37 | | 11 | 2020-03-26 13:53:40 | | 12 | 2020-03-26 13:53:43 | | 13 | 2020-03-26 13:53:46 | | 14 | 2020-03-26 13:53:49 | | 15 | 2020-03-26 13:53:52 | | 16 | 2020-03-26 13:53:55 | +----+---------------------+ 16 rows in set (0.00 sec)
从表里数据可以看到,创建的插数定时任务已经在正常运行了。
EVENT的详细信息除了用show event命令,还可以从mysql.event或information_schema.events中查询,也可以用show create event命令查看。
root@database-one 00:09: [gftest]> select * from mysql.event \G
*************************** 1. row ***************************
db: gftest
name: insert_date_testevent
body: insert into testevent(create_time) values(now())
definer: root@%
execute_at: NULL
interval_value: 3
interval_field: SECOND
created: 2020-03-26 13:53:10
modified: 2020-03-26 13:53:10
last_executed: 2020-03-26 16:09:37
starts: 2020-03-26 05:53:10
ends: NULL
status: ENABLED
on_completion: DROP
sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
comment:
originator: 1303306
time_zone: +08:00
character_set_client: utf8
collation_connection: utf8_general_ci
db_collation: utf8_general_ci
body_utf8: insert into testevent(create_time) values(now())
1 row in set (0.00 sec)
root@database-one 00:09: [gftest]> select * from information_schema.events \G
*************************** 1. row ***************************
EVENT_CATALOG: def
EVENT_SCHEMA: gftest
EVENT_NAME: insert_date_testevent
DEFINER: root@%
TIME_ZONE: +08:00
EVENT_BODY: SQL
EVENT_DEFINITION: insert into testevent(create_time) values(now())
EVENT_TYPE: RECURRING
EXECUTE_AT: NULL
INTERVAL_VALUE: 3
INTERVAL_FIELD: SECOND
SQL_MODE: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
STARTS: 2020-03-26 13:53:10
ENDS: NULL
STATUS: ENABLED
ON_COMPLETION: NOT PRESERVE
CREATED: 2020-03-26 13:53:10
LAST_ALTERED: 2020-03-26 13:53:10
LAST_EXECUTED: 2020-03-27 00:10:22
EVENT_COMMENT:
ORIGINATOR: 1303306
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
DATABASE_COLLATION: utf8_general_ci
1 row in set (0.02 sec)
root@database-one 00:10: [gftest]> show create event insert_date_testevent \G
*************************** 1. row ***************************
Event: insert_date_testevent
sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
time_zone: +08:00
Create Event: CREATE DEFINER=`root`@`%` EVENT `insert_date_testevent` ON SCHEDULE EVERY 3 SECOND STARTS '2020-03-26 13:53:10' ON COMPLETION NOT PRESERVE ENABLE DO insert into testevent(create_time) values(now())
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: utf8_general_ci
1 row in set (0.00 sec)
到这里,我们也就讲完了《带你了解MySQL中的事件调度器EVENT》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于mysql的知识点!
MySQL数据库连接异常汇总(值得收藏)
- 上一篇
- MySQL数据库连接异常汇总(值得收藏)
- 下一篇
- MySQL是如何保证数据的完整性
-
- 勤奋的哈密瓜
- 受益颇多,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢老哥分享博文!
- 2023-02-26 02:30:33
-
- 温柔的画板
- 太全面了,收藏了,感谢up主的这篇技术文章,我会继续支持!
- 2023-01-19 05:13:42
-
- 忧心的大地
- 这篇技术文章真是及时雨啊,太全面了,真优秀,已加入收藏夹了,关注作者了!希望作者能多写数据库相关的文章。
- 2023-01-15 00:59:26
-
- 数据库 · MySQL | 1天前 | MySQL · 执行计划 · 慢查询 · EXPLAIN ANALYZE · 性能诊断 · MySQL EXPLAIN ANALYZE MySQL估算行数实际行数 MySQL执行计划耗时 MySQL慢查询诊断 MySQL TREE执行计划
- MySQL EXPLAIN ANALYZE对比估算行数与实际耗时的实现方法
- 262浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL CHECK 约束上线前清理不符合约束的旧数据的实现方法
- 475浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL 在线 DDL评估加索引时的锁与空间的实现方法
- 202浏览 收藏
-
- 数据库 · MySQL | 1天前 | MySQL · SQL查询 · 窗口函数 · ROW_NUMBER · 数据分组 · ROW_NUMBER PARTITION BY MySQL 窗口函数 每组最新记录 分组取最新
- MySQL 窗口函数按分组取每组最新记录的实现方法
- 185浏览 收藏
-
- 数据库 · MySQL | 1天前 | MySQL · 数据库性能 · mysql 临时表 Performance Schema temptable_max_ram tmp_table_size
- MySQL temptable_max_ram 观察临时表内存阈值如何设置
- 409浏览 收藏
-
- 数据库 · MySQL | 1天前 | MySQL · 索引优化 · mysql Invisible Index 索引可见性
- MySQL invisible index 试验结束后如何恢复可见
- 118浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL 角色继承权限后 SHOW GRANTS 如何解读
- 101浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL 复制状态中 Retrieved_Gtid_Set 如何辅助定位缺口
- 221浏览 收藏
-
- 数据库 · MySQL | 1天前 | MySQL · 性能分析 · Performance Schema · SQL耗时 · mysql Performance Schema events_statements 平均耗时
- MySQL Performance Schema events_statements 如何找平均耗时
- 125浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL LOAD DATA 导入 TSV 时如何处理字段内制表符
- 253浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 61次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 156次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 93次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 69次使用
-
- CMMLU
- 深入了解CMMLU中文评估基准,涵盖67个学科主题,提供数据集下载、Zero-shot/Five-shot评估方法及排行榜,助力优化中文语言模型性能。
- 47次使用
-
- mysql定时任务(event事件)实现详解
- 2023-01-07 382浏览
-
- mysql 定时任务执行
- 2023-01-26 154浏览

