美文网首页
MySQL使用 Event 事件失效

MySQL使用 Event 事件失效

作者: 饿肚子吃瓜子 | 来源:发表于2019-06-12 21:13 被阅读0次

简介

事件(event)是MySQL在相应的时刻调用的过程式数据库对象,它由一个特定的线程来管理的,也就是所谓的 事件调度器
有两种调度方式。

  • 一次性的调用。
  • 周期性的调用。

事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据 调度事件 来启动的。由于他们彼此相似,所以事件也称为临时性触发器

MySQL事件跟WindowsLinux(crontab)系统中的定时任务很像,在特定的时间内执行任务。但是它们只能精确到分钟,而MySQL event 事件可以实现每秒都去执行任务。

优缺点

  1. 优点
  • 一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。
  • 可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。
  1. 缺点
  • 定时触发,不可以调用。

问题

MySQL 的定时触发的event建好后没有发生预定的事件,归纳起来有以下几种:

  1. 全局的event是关闭的;
  2. 用户权限的修改导致event失效(这种情况很少发生);
  3. event 设成了DISABLE;

解决方案

下面来演示如何解决上面出现所出现的问题

问题1 解决方案:
  1. 临时修改 (不推荐)

实际上MySQL的event默认值是off
进入MySQL命令行模式

  • 查看event是否开启:show variables like 'event_scheduler';
    这时你会发现 event_scheduler 的值是 OFF
mysql> show variables like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+
  • 临时开启 event 事件:set global event_scheduler=1;

输入完上面的命令后在执行查看命令会发现 event_scheduler 的值变成了 ON 了。
但是针对上面的操作方案个人是不推荐的。因为这只是临时的,当数据库重新启动的时候,以上方法就会失效,event_scheduler 的值会还原成默认值 OFF

  1. 通过修改配置文件的方式 (推荐)

windows 系统的 MySQL的配置文件名是 my.iniLinux系统的 MySQL 的配置文件名是 my.cnf

  • 打开配置文件在 [mysqld] 模块下添加 event_scheduler=onevent_scheduler=1
  • 重新启动MySQL。
问题 2 解决方案(暂未遇到过):

这种情况很少发生,但发生后又找不到问题,那就看看你建的event所属者有没有这个执行权限吧。
执行下面的SQL语句:

-- 查看用户权限
show grants for 'root'@'localhost';

-- 会得到下面的结果, ALL 或者 ALL PRIVILEGES 代表全部的权限
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+

修改 localhost 权限就可以了。

问题 3 解决方案:

event 设成了DISABLE 这种情况。

-- 这里以test_event为例:

-- 关闭事件任务: 
alter event test_event ON COMPLETION PRESERVE DISABLE; 
--开户事件任务: 
alter event test_event ON COMPLETION PRESERVE ENABLE;

-- 获取当前数据库的event:
show events;
-- 获取全部的event:
select * from information_schema.events;

-- 下面通过 show events; 命令的出来的结果,event 事件的状态为 ENABLED 
+-----+----------+----------------+-----------+-----------+---------------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| Db  | Name     | Definer        | Time zone | Type      | Execute at          | Interval value | Interval field | Starts              | Ends | Status  | Originator | character_set_client | collation_connection | Database Collation |
+-----+----------+----------------+-----------+-----------+---------------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| api | test     | root@localhost | SYSTEM    | RECURRING | NULL                | 1              | DAY            | 2019-07-01 00:00:00 | NULL | ENABLED |          1 | utf8mb4              | utf8mb4_general_ci   | utf8_general_ci    |
| api | test_one | root@localhost | SYSTEM    | ONE TIME  | 2019-07-01 00:00:00 | NULL           | NULL           | NULL                | NULL | ENABLED |          1 | utf8mb4              | utf8mb4_general_ci   | utf8_general_ci    |
+-----+----------+----------------+-----------+-----------+---------------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+

参考

相关文章

  • MySQL使用 Event 事件失效

    简介 事件(event)是MySQL在相应的时刻调用的过程式数据库对象,它由一个特定的线程来管理的,也就是所谓的 ...

  • token失效跳转登录接口

    token失效跳转登录接口 登录界面发送event事件 携带旧的token发送接口

  • mysql 事件调度event_scheduler

    mysql自身提供了定时调度的功能 开启关闭 MySQL事件调度器event_scheduler负责调用事件,它默...

  • event 事件对象

    event 对象及使用 event 对象是什么? event 对象表示事件的状态,当 dom 树中某个事件被触发时...

  • MySQL常用语法

    存储过程PROCEDURE 函数FUNCTION 事件EVENT 备注:MYSQL默认是关闭事件机制的,需要自行开...

  • JS中的事件

    JS中的事件 一:自定义事件 1.使用Event自定义事件 使用Event接口,可以自定义事件。但是该接口无法在事...

  • mysql 使用 Navicat 创建事件 (event) 定时

    DATE_SUB() 函数 type 参数 MICROSECONDSECONDMINUTEHOURDAYWEEKM...

  • Python - 基于pygame -2

    Demo - 2 事件检索 使用pygame.event 处理 事件检索 使用事件集 处理使用事件获得鼠标位置...

  • event参数小记

    event自动传入 绑定事件处理函数的时候,经常需要用到event,比如使用了事件代理,需要通过event来拿到事...

  • Navicat中事件定时器的方法

    首先通过Navicat for MySQL查看Event事件是否开启,具体代码: show variables l...

网友评论

      本文标题:MySQL使用 Event 事件失效

      本文链接:https://www.haomeiwen.com/subject/fjolfctx.html