≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > MySQL

MySQL Event Scheduler(事件调度器)

人气:465 时间:2020-07-09

这篇文章主要为大家详细介绍了MySQL Event Scheduler(事件调度器),具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编小韵来看看吧!

一、概述
  事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功>能。例如,Linux 中的 crontabe 只能精确到每分钟执行一次,而 MySQL 的事件调度器则可以实现每秒钟执行一个任务,这在一些对实时性要>求较高的环境下就非常实用了。
  事件调度器是定时触发执行的,在这个角度上也可以称作是"临时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。启用事件调度器后,拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。通过设定全局变量event_scheduler 的值即可动态的控制事件调度器是否启用。

代码如下:

 
(root:localhost:)test> SET GLOBAL event_scheduler = ON; 
(root:localhost:)test> show processlist\G 
*************************** 4. row *************************** 
Id: 46147 
User: event_scheduler 
Host: localhost 
db: NULL 
Command: Daemon 
Time: 1 
State: Waiting on empty queue 
Info: NULL 

  如上,该线程的所有者是 event_scheduler。
  二、应用案例
  本案例是利用 event scheduler 的特性,每秒钟调用一次存储过程,用于判断 SLAVE 是否正常运行,如果发现 SLAVE 关闭了,忽略 0 次错误,然后重新启动 SLAVE。
  首先创建存储过程
delimiter //

代码如下:

 
create procedure `Slave_Monitor`() 
begin 
SELECT VARIABLE_VALUE INTO @SLAVE_STATUS 
FROM information_schema.GLOBAL_STATUS 
WHERE VARIABLE_NAME='SLAVE_RUNNING'; 
IF ('ON' != @SLAVE_STATUS) THEN 
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=0; 
SLAVE START; 
END IF; 
end; // 
delimiter ; 

  由于存储过程中无法调用类似 SHOW SLAVE STATUS 这样的语句,因此无法得到确切的复制错误信息和错误代码,不能进一步的处理 SLAVE 停止的各种情况。
  接着,创建任务

代码如下:

 
CREATE EVENT IF NOT EXISTS `Slave_Monitor` 
ON SCHEDULE EVERY 5 SECOND 
ON COMPLETION PRESERVE 
DO 
CALL Slave_Monitor(); 

  创建了一个任务,每 5秒钟 执行一次,任务结束后依旧保留该任务,而不是删除。当然了,在本例中的任务不会结束,除非将它手动禁止了。
  如果在运行中想要临时关闭一下某个任务,执行 ALTER EVENT 语句即可:

代码如下:

 
(root:localhost:)test> alter event `Slave_Monitor` ON 
COMPLETION PRESERVE DISABLE; 
(root:localhost:)test> alter event `Slave_Monitor` ON 
COMPLETION PRESERVE ENABLE; 

本文来自:http://www.q1010.com/177/10574-0.html

注:关于MySQL Event Scheduler(事件调度器)的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:MYSQL

您可能感兴趣的文章

  • Linux MySQL命令安装允许远程连接的安装设置方法
  • 对MySQL配置参数 my.ini/my.cnf的详细解析
  • Can't connect to MySQL server的解决办法
  • 用Jena将本体文件存入MySQL数据库的实现方法
  • MySQL中返回一个数据库的所有表名,列名数据类型备注
  • MySQL server has gone away 问题的解决方法
  • MySQL 数据库优化的具体方法说明
  • MySQL 随机查询数据与随机更新数据实现代码
  • MySQL数据库中的现有表增加新字段(列)
  • MySQL主从库不同步故障一例解决方法
上一篇:Linux下安装MySQL多实例作为数据备份服务器实现多主到一从多实例的备份
下一篇:MySQL主从库不同步故障一例解决方法
热门文章
  • mysql 修改character_set_server为utf-8的简单示例
  • 解决MySQL丢失文件localhost.localdomain.pid、mysql.sock的示例
  • MySQL 数据类型binary和varbinary的简单示例
  • MySQL:reading initial communication packet问题解决方法
  • MySql 表类型MYISAM、InnoDB区别
  • bash: mysql: command not found 的解决方法
  • MYSQL默认用户名ROOT修改方法
  • MySQL 常用命令菜鸟教程
  • MySQL 使用命令行新建用户并授予权限
  • MySql 数据库物理文件存放位置查看示例
  • 最新文章
    • MySQL查看死锁与解除死锁的简单示例
    • MySQL 慢查询的功能实例
    • MySQL查看死锁与去除死锁的简单示例
    • MySQL找出未提交事务的SQL的简单示例
    • MySQL锁阻塞的的简单示例
    • MySQL中的binary类型使用操作的示例
    • SQL优化教程之in与range查询的简单示例
    • MySQL 的 21 个规范、优化最佳实践!
    • MySQL 字符类型大小写敏感的简单示例
    • 解决mybatis-plus分页传入参数后sql where条件没有limit分页信息的问题

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。