`
zhang_ly520
  • 浏览: 162114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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。

二、应用案例

本文不讨论详细的事件调度器的语法,具体的语法参考可以看MySQL手册 第20章

本案例是利用 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://imysql.cn/node/318

分享到:
评论

相关推荐

    详解MySQL用事件调度器Event Scheduler创建定时任务

    事件调度器相当于操作系统中的定时任务(如:Linux中的cron、Window中的计划任务),但MySql的事件调度器可以精确到秒,对于一些实时性要求较高的数据处理非常有用。 1. 创建/修改事件(EVENT) 在MySql中,创建一个新...

    MySQL Event Scheduler(事件调度器)

    一、概述 事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功>能。例如,Linux 中的 crontabe 只能精确到每分钟执行一次,而 MySQL ...

    MySQL计划任务(事件调度器) Event Scheduler介绍

    要查看当前是否已开启事件调度器,可执行如下SQL: SHOW VARIABLES LIKE ‘event_scheduler’;或 SELECT @@event_scheduler;或 SHOW PROCESSLIST;若显示: +—————–+——-+| Variable_name | Value |+————...

    带你了解MySQL中的事件调度器EVENT

    MySQL中的事件调度器(EVENT)是一个功能强大的工具,允许数据库管理员安排MySQL数据库执行计划任务。这些计划任务可以定时执行特定的SQL语句或语句块,从而实现周期性的数据处理和维护任务自动化。事件调度器类似于...

    解决mysql failed to open table mysql.event

    - 检查`my.cnf`(或`my.ini`,取决于你的系统)配置文件,确保`event_scheduler`参数设置为`ON`,允许MySQL事件调度器运行。 - 修改配置后,需要重启MySQL服务使更改生效。 5. **数据目录**: - 确保MySQL的数据...

    MySQL数据库:触发器与事件调度器技术教程

    ### MySQL数据库:触发器与事件调度器技术教程 #### 一、MySQL触发器基础 **1.1 触发器的概念与作用** 触发器是一种特殊类型的存储过程,它被设计成在特定的数据库操作(例如INSERT、UPDATE、DELETE)发生时自动...

    [数据库] Navicat for MySQL事件Event实现数据每日定期操作1

    在实际开发中,为了确保Event在数据库重启或断电后仍能正常工作,需要在my.cnf或my.ini配置文件中添加`event_scheduler = ON`,使MySQL服务启动时自动开启事件调度器。 此外,Event的状态可以通过`ALTER EVENT`命令...

    使用mysql事件调度器定时删除binlog

    MySQL事件调度器(Event Scheduler)是自MySQL 5.1.6版本引入的一个功能,它允许数据库管理员在MySQL内部创建和管理定时任务,而无需依赖操作系统级别的计划任务服务。这一特性大大提高了灵活性,尤其是在那些需要...

    老生常谈mysql event事件调度器(必看篇)

    参数event_scheduler为事件调度器的总开关,一般来说设置为ON或者OFF就好,不建议设置成disabled,如果设置为ON,show processlist可看到该线程 创建,修改,查看等语法 关于如何创建,修改event这里不做叙述,...

    mysql Event Scheduler: Failed to open table mysql.event

    MySQL中的事件调度器(Event Scheduler)是一个用于在指定时间执行特定任务的功能,它可以周期性地运行SQL语句或语句块,类似于触发器。然而,当事件调度器无法打开mysql.event表时,可能会遇到错误“Event ...

    MySQL的事件调度器使用介绍

    MySQL的事件调度器(Event Scheduler)是一个内置的定时任务系统,自5.1.0版本引入,用于自动执行预先定义的任务,这些任务可以根据设定的时间表定期运行。它类似于Linux的cron服务或Windows的任务计划程序,但它是...

    mysql的计划任务与事件调度实例分析

    在默认情况下,事件调度可能并未启用,要开启它,需要执行`SET GLOBAL event_scheduler = ON;`。同样,若要禁用事件调度,只需将其值设为`OFF`即可。 创建事件使用`CREATE EVENT`语句,其语法结构与创建存储过程和...

    MySQL定时执行脚本(计划任务)命令实例

    首先,你需要确保MySQL的事件调度器(Event Scheduler)是开启状态。你可以通过执行以下查询来检查: ```sql SHOW VARIABLES LIKE '%sche%'; ``` 如果`event_scheduler`变量的值为`OFF`,你需要将其开启,可以通过...

Global site tag (gtag.js) - Google Analytics