(14)mysql中的事件

概述

事件调度器是MySQL5.1后新增的功能,可以将数据库按自定义的时间周期触发某种操作,可以理解为时间触发器,类似于linux系统下面的任务调度器crontab,或者类似与window下面的计划任务。值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。

查看事件功能是否开启

在使用事件这个功能,首先要保证你的mysql的版本是5.1以上,然后还要查看你的mysql服务器上的事件是否开启。

查看事件是否开启,使用如下命令查看:

#方式一
SHOW VARIABLES LIKE ‘event_scheduler‘;
#方式二
SELECT @@event_scheduler;
#方式三
SHOW PROCESSLIST;

#查看事件状态
SHOW EVENTS;

如果看到event_scheduler为on或者PROCESSLIST中显示有event_scheduler的信息说明就已经开启了事件。如果显示为off或者在PROCESSLIST中查看不到event_scheduler的信息,那么就说明事件没有开启,我们需要开启它。

开启事件功能

方式一、通过动态参数修改

SET GLOBAL event_scheduler = ON;

更改完这个参数就立刻生效了,但是重启mysql又还原了,即设置不能跨重启。

方式二、更改配置文件然后重启

在my.cnf中的[mysqld]部分添加如下内容,然后重启mysql。

event_scheduler=ON;

一劳永逸,需要能够修改数据库配置的权限。

方式三、直接在启动命令加上“–event_scheduler=1”

mysqld ... --event_scheduler=ON

事件的语法

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}

DEFINER: 定义事件执行的时候检查权限的用户。

ON SCHEDULE schedule: 定义执行的时间和时间间隔。

ON COMPLETION [NOT] PRESERVE: 定义事件是一次执行还是永久执行,默认为一次执行,即NOT PRESERVE。

ENABLE | DISABLE | DISABLE ON SLAVE: 定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上DISABLE ON SLAVE。

COMMENT ‘comment’: 定义事件的注释。

2. 更改事件

ALTER
    [DEFINER = { user | CURRENT_USER }]
    EVENT event_name
    [ON SCHEDULE schedule]
    [ON COMPLETION [NOT] PRESERVE]
    [RENAME TO new_event_name]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT ‘comment‘]
    [DO event_body]

3. 删除事件的语法

DROP EVENT [IF EXISTS] event_name;

事件使用举例

1. 创建事件

举例一

定时每隔3秒向表test2中插入数据

create event event_insert_t2
on schedule every 3 second
on completion preserve
do insert into test2(department,time_v) value(‘1‘,now());

执行结果

举例二

创建一个10分钟后清空test表数据的事件

CREATE EVENT IF NOT EXISTS event_truncate_test2
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
DO TRUNCATE TABLE test2;

举例三

创建一个在2015-04-17 14:42:00时刻清空test表数据的事件

DROP EVENT IF EXISTS event_truncate_test2;
CREATE EVENT event_truncate_test2
ON SCHEDULE
AT TIMESTAMP ‘2015-04-17 14:42:00‘
DO TRUNCATE TABLE test2;

举例四

5天后开启每天定时3秒向表test2中插入数据,一个月后停止执行

CREATE EVENT IF NOT EXISTS event_truncate_test2
ON SCHEDULE EVERY 3 SECOND
STARTS CURRENT_TIMESTAMP + INTERVAL 5 day
ENDS CURRENT_TIMESTAMP + INTERVAL  1 month
ON COMPLETION PRESERVE
DO INSERT INTO test2(department,time_v) VALUES(‘1‘,NOW());

修改事件举例

举例一

临时关闭事件

alter event event_insert_t2 disable;

其他类似创建事件。

删除事件举例

DROP EVENT IF EXISTS event_insert_t2;

事件调用存储过程或函数如同普通调用。

事件的优缺点及应用场景

  1. 优点

    • 定时任务由dba统一管理,避免部署在操作系统层。
    • 减少系统管理员产生误操作的风险。
    • 有利于后续的管理和维护。
  2. 缺点
    • 在繁忙且要求性能的数据库上慎重部署和启用调度器。
    • 过于复杂的处理更适合使用程序实现。
    • 开启和关闭事件需要具有超级用户权限。
  3. 应用场景

    适用于定期收集统计信息,定期清除历史数据,定期数据库检查等等。

参考

http://blog.163.com/[email protected]/blog/static/8854373520105182123112/

http://blog.chinaunix.net/uid-20639775-id-3323098.html

时间: 2024-10-17 12:03:13

(14)mysql中的事件的相关文章

MySql中的事件

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

MySQL中存储过程+事件的使用方法

一.背景 将界面操作日志存储在MySQL数据库中的operationlog表中,如果该表不能自动备份,表中的数据会越来越多,影响速度.可以定期将表中数据备份到另外一个表中来解决. 二.解决方案 1.使用MySQL中的存储过程+事件解决. 存储过程逻辑为: 1)创建一个新表operationlog_temp,各字段同operationlog相同; 2)将表operationlog更名为operationlog_yyyy-mm-dd; 3)将表operationlog_temp更名为operatio

mysql中的事件调度功能

使用mysql的事件功能几个前提: 一:使用的版本必须是5.1或者以上的,因为5.1以后才支持此功能 二:检查是否开启了事件功能: SHOW VARIABLES LIKE 'event_scheduler'; 显示OFF则为关闭(系统默认是关闭的) 打开命令为: SET GLOBAL event_scheduler =1; 或者 SET GLOBAL event_scheduler = ON; 关闭事件功能的命令为: SET GLOBAL event_scheduler = 0; 或者 SET

Mysql中的事件(定时任务)

一.什么是事件 一组SQL集,用来执行定时任务,跟触发器很像,都是被动执行的,事件是因为时间到了触发执行,而触发器是因为某件事件(增删改)触发执行: 二.开启事件 查看是否开启: show variables like 'event_scheduler'; 如果显示OFF,则输入以下语句开启: set global event_scheduler = off; 三.自定义简单的事件 新建user表: -- ---------------------------- -- Table structu

很奇怪这个var变量一定要放在事件里面。 mysql中BLOB字段内容如何查看。

很奇怪这个var变量一定要放在事件里面. mysql中BLOB字段内容如何查看. sessionStorage在项目中的应用 initAutoComplate 原文地址:https://www.cnblogs.com/wzdnwyyu/p/11169121.html

MySQL 中的数据类型介绍

MySQL 中的数据类型介绍 标签: mysql数据类型mysql全部数据类型mysql字段类型mysql数据存储mysql 2016-04-29 20:24 53643人阅读 评论(11) 收藏 举报  分类: 服务器及软件---MySQL数据库(4)  版权声明:http://blog.csdn.net/anxpp 目录(?)[+] 据我统计,MySQL支持39种(按可使用的类型字段统计,即同义词也作多个)数据类型.下面的介绍可能在非常古老的MySQL版本中不适用. 转载请注明出处:http

『浅入深出』MySQL 中事务的实现

在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务具有 ACID 四个基本属性,而我们不知道的可能就是数据库是如何实现这四个属性的:在这篇文章中,我们将对事务的实现进行分析,尝试理解数据库是如何实现事务的,当然我们也会在文章中简单对 MySQL 中对 ACID 的实现进行简单的介绍. 事务其实就是并发控制的基本单位:相信我们都知道,事务是一个序列操作,其中的操作要么都执行,要么都不执行,它是一个不可分割的工作单位:数据库事务的 ACID 四大特性是事务的基础,了解了 AC

详细介绍MySQL中数据的备份与恢复,防止数据丢失

在日常的生产环境中为什么要进行备份 ??备份可以使生产中的数据进行有效的灾难恢复:硬件故障.软件故障.自然灾害.**.误操作测试等数据丢失场景. 备份注意要点 能容忍最多丢失多少数据 恢复数据需要在多长时间内完成 需要恢复哪些数据 还原要点 做还原测试,用于测试备份的可用性 还原演练 备份类型 完全备份.不分备份 完全备份:整个数据集 部分备份:只备份数据子集,如部分库或表 增量备份.差异备份 增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据,备份较快,还原复杂 差异备份

说说MySQL中的Redo log Undo log都在干啥

阅读目录(Content) 1 undo 1.1 undo是啥 1.2 undo参数 1.3 undo空间管理 2 redo 2.1 redo是啥 2.2 redo 参数 2.3 redo 空间管理 3 undo及redo如何记录事务 3.1 Undo + Redo事务的简化过程 3.2  IO影响 3.3 恢复 在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件. MySQL中的日志文件,