`
lbyzx123
  • 浏览: 478080 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL5.5如何事件调度

 
阅读更多
自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得一提的是MYSQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。

事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。

在使用这个功能之前必须确保event_scheduler已开启,可执行

SET GLOBAL event_scheduler = 1;

或我们可以在配置my.ini文件 中加上event_scheduler = 1或

SET GLOBAL event_scheduler = ON;

来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如:

mysqld ... --event_scheduler=1

要查看当前是否已开启事件调度器,可执行如下SQL:

SHOW VARIABLES LIKE 'event_scheduler';

或

SELECT @@event_scheduler;

或

拥有SUPER 权限的账户执行SHOW PROCESSLIST 就可以看到这个线程了。

5.3、定时服务配置
    CREATE EVENT [IF NOT EXISTS] event_name

    ON SCHEDULE schedule

    [ON COMPLETION [NOT] PRESERVE]

    [ENABLE | DISABLE]

    [COMMENT 'comment']

    DO sql_statement;

schedule如何定义如下:

    AT TIMESTAMP [+ INTERVAL INTERVAL] | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]

INTERVAL:

quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |

              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |

              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}


5.3.1每秒插入一条记录到数据表

USE test;

CREATE TABLE aaa (timeline TIMESTAMP);

CREATE EVENT e_test_insert

ON SCHEDULE EVERY 1 SECOND

DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

等待3秒钟后,再执行查询看看:

mysql> SELECT * FROM aaa;

+---------------------+

| timeline            |

+---------------------+

| 2007-07-18 20:44:26 |

| 2007-07-18 20:44:27 |

| 2007-07-18 20:44:28 |

+---------------------+

5.3.2 5秒(天)后清空test表

CREATE EVENT e_test

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 SECOND

DO TRUNCATE TABLE test.aaa;

CREATE EVENT e_test

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY

DO TRUNCATE TABLE test.aaa;

5.3.3 2008年5月23日9点39分20秒整清空test表

CREATE EVENT e_test

ON SCHEDULE AT TIMESTAMP '2008-05-23 9:39:20'

DO TRUNCATE TABLE test.aaa;

这个测试有问题。还不太明白原因。

5.3.4每天定时清空test表

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

DO TRUNCATE TABLE test.aaa;

5.3.5 5天后开启每天定时清空test表

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY

DO TRUNCATE TABLE test.aaa;

这里5天也可以为0天,当时就开启清空表

5.3.6每天定时清空test表,5天后停止执行

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY

DO TRUNCATE TABLE test.aaa;

该设置要求天数大于1,否则报错。而且创建不成功

5.3.7 5天后开启每天定时清空test表,一个月后停止执行

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY

ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH

DO TRUNCATE TABLE test.aaa;[ON COMPLETION [NOT] PRESERVE]

可以设置这个事件是执行一次还是持久执行,默认为NOT PRESERVE。

该事件会停止每隔一秒插入数据的事件,感觉这点上mysql做的还是有问题。

5.3.8每天定时清空test表(只执行一次,任务完成后就终止该事件)

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

ON COMPLETION NOT PRESERVE

DO TRUNCATE TABLE test.aaa;

[ENABLE | DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。

[COMMENT ‘comment’]可以给该事件加上注释。

5.4、定时服务日常维护测试

5.4.1修改事件(ALTER EVENT)

ALTER EVENT event_name

    [ON SCHEDULE schedule]

    [RENAME TO new_event_name]

    [ON COMPLETION [NOT] PRESERVE]

    [COMMENT 'comment']

    [ENABLE | DISABLE]

    [DO sql_statement]

a、临时关闭事件

ALTER EVENT e_test DISABLE;

b、开启事件

ALTER EVENT e_test ENABLE;

c、将每天清空test表改为5天清空一次:

ALTER EVENT e_test

ON SCHEDULE EVERY 5 DAY;

d、重命名事件并加上注释

alter event test.new_e_test rename to e_test comment 'e_test_cm';

5.4.2删除事件(DROP EVENT)

语法很简单,如下所示:

DROP EVENT [IF EXISTS] event_name例如删除前面创建的e_test事件

DROP EVENT e_test;当然前提是这个事件存在,否则会产生ERROR 1513 (HY000): Unknown event错误,因此最好加上IF EXISTS

DROP EVENT IF EXISTS e_test;

5.4.3查看事件

a、查看一个event的详细信息可以用下面的视图:

SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'test_insert'   AND EVENT_SCHEMA = 'test'\G;

b、简要列出所有的event:show events

语法:

SHOW EVENTS [FROM schema_name]

    [LIKE 'pattern' | WHERE expr]

格式化显示所有event

SHOW EVENTS\G

格式化显示test用户的event

show events FROM test;

c、查看event的创建信息

SHOW CREATE EVENT event_name

show create event test.e_test\G

5.5、结论

该特性确实非常有用,可作为定时清空数据表、监控主从服务器、汇总数据到另一张表等等,并且可以精确到每秒,实时性也可以得到保障。

不过如果当两个事件的针对相同的对象的时候,会出现冲突,这种情况还不明确是我理解的问题还是确实是这样,比如每秒插入和定时删除就会冲突。除了调度SQL语句之外,MYSQL的调度器也可以调度存储过程。

5.6、缺点

SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'test_insert'  AND EVENT_SCHEMA = 'troaudit_db'\G;

 

*************************** 1. row ***************************

       EVENT_CATALOG: NULL

        EVENT_SCHEMA: troaudit_db

          EVENT_NAME: event_session_table

             DEFINER: egilance@%

           TIME_ZONE: SYSTEM

          EVENT_BODY: SQL

    EVENT_DEFINITION: BEGIN

        CALL create_table_process;

    END

          EVENT_TYPE: RECURRING

          EXECUTE_AT: NULL

      INTERVAL_VALUE: 1800

      INTERVAL_FIELD: SECOND

            SQL_MODE:

              STARTS: 2011-08-23 10:51:28

                ENDS: NULL

              STATUS: ENABLED

       ON_COMPLETION: PRESERVE

             CREATED: 2011-08-23 10:51:28

        LAST_ALTERED: 2011-08-23 10:51:28

       LAST_EXECUTED: 2011-08-23 17:55:51

       EVENT_COMMENT:

          ORIGINATOR: 0

CHARACTER_SET_CLIENT: utf8

COLLATION_CONNECTION: utf8_general_ci

  DATABASE_COLLATION: utf8_unicode_ci

1 row in set (0.00 sec)

 

MySQL只会记录最后一次调度的时间,如果时间往前调整,小于最近执行的时间,则不会执行事件调度。
示例:
CREATE  EVENT real_data_statistics_job  
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(),INTERVAL 1 DAY),INTERVAL 1 MINUTE)
ON COMPLETION PRESERVE ENABLE  
DO  
CALL p_statistics_weather_data(); 
ALTER EVENT real_data_statistics_job ON    
COMPLETION PRESERVE ENABLE; 
总结:
仅有两种方式:1、AT方式,只执行1次,如:AT TIMESTAMP '2008-05-23 9:39:20' 或者  AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR。
2、EVERY方式,可以执行多次,STARTS和ENDS可选,均是指时间点,指任务什么时间开始执行和任务什么时间结束执行,EVERY是周期的意思,每隔多长时间执行一次。如:EVERY 1 DAY或者EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY或者SCHEDULE EVERY 1 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY或者 EVERY 1 DAY STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH。

 

分享到:
评论

相关推荐

    mysql5.5 for windows

    4. **并发性能提升**:通过改进线程池和多线程调度,MySQL 5.5可以更有效地处理并发请求,尤其是在高负载环境下。 5. **复制功能**:MySQL 5.5改进了复制特性,包括半同步复制,确保主库上的事务在被复制到从库之前...

    MySQL 5.5 服务器变量详解

    - **定义**: 控制MySQL是否启用事件调度器。 - **作用范围**: 全局级别。 - **配置**: 可以在配置文件中设置。 - **动态性**: 动态变量,可以在运行时通过`SET`命令更改。 - **默认值**: OFF,表示不启动事件调度器...

    mysql5.5下载

    - 并发性能提升:通过改进InnoDB锁定机制和线程调度,MySQL 5.5在多用户并发环境下表现更优。 - Full-text搜索增强:增加了对中文等非英文字符集的支持,提高了全文索引的效率。 - 查询优化器改进:使用新的统计...

    MySQL5.5从零开始学.pdf

    12. **触发器与事件**:介绍触发器的概念,如何在特定操作后自动执行某些任务,以及如何创建和管理定时执行的任务(事件调度器)。 13. **XML与JSON支持**:探讨MySQL对XML和JSON这两种非结构化数据格式的支持,...

    mysql5.5参考手册

    总的来说,"mysql5.5参考手册"是一本全面且深入的指南,涵盖了MySQL 5.5的所有关键特性和技术细节,无论是数据库管理员、开发人员还是运维人员,都可以从中找到所需的信息,提高对MySQL 5.5的理解和使用能力。

    MySQL 5.5简体中文参考手册(PDF)

    11. **触发器和事件调度器**:提供了关于如何创建和管理数据库级触发器以自动执行某些任务,以及使用事件调度器来定期运行任务的指导。 12. **XML和JSON支持**:MySQL 5.5开始支持XML和JSON数据类型,手册解释了...

    MySQL5.5从零开始学

    ### MySQL5.5从零开始学 在当前大数据与云计算高速发展的时代背景下,数据库作为数据存储的核心技术之一,其重要性不言而喻。对于初学者来说,掌握一门数据库技术至关重要,MySQL作为一款广泛使用的开源关系型...

    MYSQL 5.5.15.0离线安装包

    MySQL 5.5.15.0 是 MySQL 数据库管理系统的一个特定版本,它在发布时提供了许多增强功能和改进,特别是在性能、稳定性和安全性方面。这个版本特别适用于那些需要在Windows XP操作系统上运行MySQL的用户,因为XP系统...

    MySQL5.5.62

    1. **InnoDB 存储引擎增强**:MySQL 5.5 强化了 InnoDB 存储引擎,使其成为默认引擎,提供事务处理、行级锁定以及外键支持。在5.5.62这个版本中,可能包含对性能和并发性的进一步优化。 2. **Full-text Search 改进...

    MySQL Server 5.5 Win32 精简版

    7. **更高的并发性能**:通过调整内部调度机制,MySQL 5.5能够更好地处理大量并发连接,提升了服务器负载能力。 对于“Win32”版本,这意味着该软件是专门为32位Windows操作系统编译的,尽管现在64位系统更为常见,...

    mysql-installer-5.5.19.0.rar

    1. **下载与启动**:首先,下载提供的"mysql-installer-5.5.19.0.rar"压缩包,解压后运行"mysql-installer-5.5.19.0.msi"。 2. **欢迎界面**:安装程序启动后,会显示欢迎界面,点击“Next”继续。 3. **选择配置...

    MySQL5中文参考手册

    - 事件的创建和调度,实现定时任务。 8. **备份与恢复**: - 使用mysqldump进行数据库备份和还原。 - 使用mysqlpump工具进行快速备份和恢复。 9. **权限管理**: - 用户账户的创建与管理,以及GRANT和REVOKE...

    mysql-5.5.54-winx64.zip

    1. **InnoDB存储引擎优化**:MySQL 5.5默认使用InnoDB引擎,提供了事务处理、行级锁定以及外键支持。在这个版本中,InnoDB进行了大量优化,包括更快的插入速度、更高的并发性能以及更小的内存占用。 2. **性能提升*...

    MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要区别整理

    从给定文件中可以看出,我们将要讨论的是MySQL的几个重要版本,它们分别是4.1、5.0、5.1、5.5和5.6版本。这些版本之间有着各自不同的功能特性与改进,下面将详细阐述这些版本之间的主要区别。 ### MySQL 4.1版本 ...

    mysql-5.5.15-win32

    6. **更高的并发能力**:通过改进线程池和调度机制,MySQL 5.5能够处理更多的并发连接,提高服务器的并发处理能力。 7. **优化的查询执行**:MySQL 5.5包含了一系列查询优化器的改进,如更智能的索引选择和更高效的...

    mysql-5.5.40-win32-msi

    2. **性能提升**:MySQL 5.5通过优化查询执行计划,改进缓冲池管理,以及采用更高效的线程调度,显著提升了查询速度和整体性能。 3. **分区功能增强**:表分区功能在5.5版本中得到增强,支持更多的分区类型,如线性...

    mysql-5.5.25a-winx64(安装版).zip

    MySQL 5.5 版本是 MySQL 的一个重要里程碑,因为它引入了许多新特性和性能改进。其中关键的更新包括: 1. **InnoDB 存储引擎增强**:MySQL 5.5 对 InnoDB 引擎进行了大量优化,提升了事务处理速度和并发性能。支持...

    mysql安装包

    7. **更高的并发性能**:通过改进线程调度和内存管理,MySQL 5.5能更好地处理高并发工作负载,提高服务器的吞吐量。 8. **安全性和兼容性**:支持更多的加密算法,提高了安全性,并且对SQL标准的兼容性有所增强。 ...

    mysql-5.5.18-winx64.zip

    7. **更高的并发性**:通过调整内部调度机制,MySQL 5.5可以处理更多的并发连接,提高了服务器的并发处理能力。 8. **半同步复制**:这个特性确保了至少有一个从服务器接收到并应用了主服务器的事务,提高了数据...

    mysql-5.5.48-linux2.6-x86_64.tar.gz

    MySQL 5.5系列是一个重要的升级,引入了多项性能优化和功能增强,旨在提供更高的并发处理能力以及更强大的数据处理功能。5.5版本的核心改进包括: 1. **InnoDB存储引擎增强**:在5.5版本中,InnoDB成为默认的事务...

Global site tag (gtag.js) - Google Analytics