MySQL 定时器

MySQL 定时器

MySQL 定时器

工作中常存在一些固定任务,需要周期性执行。

有些需要在服务中,也有一些完全存在于数据层面。

对于数据层面的任务,可以借助定时器,而不需要在服务中执行。

这里介绍的是MySQL数据库的定时器。

功能开启

首先查看定时器功能是否开启

sql 复制代码
SHOW VARIABLES LIKE 'event_scheduler';

结果集中,OFF表示关闭 , ON表示开启。

若为OFF,则需要开启该功能:

sql 复制代码
SET GLOBAL event_scheduler = 'ON'; 

sql 复制代码
SET GLOBAL event_scheduler = 1; 

此处注意,需要 root 用户权限 才能执行。

使用这种方式,若MySQL服务后续重启(虽然通常很少重启,但也会有的),定时器功能依然会恢复关闭。

可以通过修改配置文件的方式,调整定时器默认开关。

方法也比较简单,找到mysql根目录下 my.ini 文件,打开并在 [mysqld] 标记下方添加:

event_scheduler = ON

示例

创建定时器:

sql 复制代码
CREATE EVENT [EVENT_NAME] ON SCHEDULE EVERY 1 QUARTER STARTS DATE_ADD(
        DATE_ADD(DATE(CONCAT(YEAR(CURDATE()), '-', ELT(QUARTER(CURDATE()), 1, 4, 7, 10), '-', 1)), INTERVAL 1 QUARTER),
        INTERVAL 1 HOUR) ON COMPLETION PRESERVE DO CALL PROCEDURE_NAME();

该定时器设置为每个季度第一天的凌晨一点,执行 PROCEDURE_NAME() 任务。

注意

有几个关键点需要注意:

  1. EVENT_NAME 名称最大长度可以是64个字节,同一数据库中唯一。
  2. ON SCHEDULE 计划任务,可以像上述示例一样,使用EVERY关键字,创建重复执行的任务;也可以使用AT,创建固定时间点执行的任务。
  3. DO [sql_statement],上述示例中使用的是DO CALL PROCEDURE_NAME(),执行存储过程;也可以是具体的SQL语句。
    如果是复合语句,按照顺序写在BEGIN和END标识符中即可,如:
sql 复制代码
BEGIN
	DROP TABLE TEST_TABLE;
	CALL PROCEDURE_NAME();
END
  1. 删除已经创建的事件使用DROP EVENT语句。
    若事件正在执行中,将会在执行结束后删除。
    使用DROP USER和DROP DATABASE 语句同时会将包含其中的事件删除。
  2. ON COMPLETION PRESERVE,在任务执行结束后,保留定时器。若设置为NOT PRESERVE,则在任务结束后清除定时器,若未设置,默认NOT PRESERVE。
相关推荐
tatasix15 分钟前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。28 分钟前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了29 分钟前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度31 分钟前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮33 分钟前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
gma9991 小时前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️1 小时前
华为ASP与CSP是什么?
服务器·前端·数据库
Yz98762 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
武子康2 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
黑色叉腰丶大魔王2 小时前
《MySQL 数据库备份与恢复》
mysql