天天看点

Mysql定时任务配置详细说明

作者:素手挽清风LINDA

1. 定时任务(Event)简介

自MySQL5.1.6起,增加了一个非常有特色的功能-事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总、数据备份等等),来取代原先只能由外部程序的计划任务来执行的工作。

2. 定时任务(Event)优缺点

优点:一些对于数据的定时操作不再依赖于外部程序,而可以直接利用数据库本身提供的功能,增加了快捷方便性。Mysql的定时任务可以实现每秒钟执行1个任务,而操作系统的计划任务(如:Linux的cron或Windows下的任务计划)只能精确到每分钟执行一次,这在对实时性要求高的环境下就非常实用。

缺点:定时触发,不可以调用

3. 具体操作

(1) 查看数据库定时策略是否开启,输入以下命令:

show variables like '%event_sche%';

运行结果如下:

Mysql定时任务配置详细说明

如果是OFF表示没有开启,修改成ON,输入以下命令:

set global event_scheduler=1;

修改后查再看一次据库定时策略是否开启。

(2) 创建procedure(存储过程),比如创建demo_insert作为执行体:

create procedure demo_insert()

BEGIN

INSERT INTO testdata set name="test2",shuju=20;

END

提示:begin和end中间放要定时处理的sql用 ;结尾,可以放多个sql

(3) 创建定时任务,比如创建名为demo01的定时任务:

create event demo01

-- 每10分钟执行一次

ON SCHEDULE EVERY 10 MINUTE

on completion preserve disable

-- 任务使用第二点定义的demo_insert作为执行体

do call demo_inser();

(4) 查看任务建立情况:

SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;

(5) 把指定的任务开启:

ALTER EVENT demo01 ON COMPLETION PRESERVE ENABLE;

提示:

关闭指定的任务命令为:ALTER EVENT demo01 ON COMPLETION PRESERVE DISABLE;

删除指定的任务命令为:drop event demo01;

(6) 查看指定任务的详细信息:

SELECT * FROM information_schema.EVENTS WHERE event_name='demo01';

4. 注意事项:

(1) event_scheduler的修改会随着数据库服务器重启恢复到原来状态,设置开机自动开启需要配置mysql的配置文件my.ini添加下面的一行配置:

[mysqld]

event_scheduler=ON

(2) 对于任务的执行方式总结了一些时间控制的命令:

Mysql定时任务配置详细说明

5. 用navicat创建(推荐)

Mysql定时任务配置详细说明

如上图左键点击新建事件。

创建事件中的定义一栏是写执行sql的,可以包括一条或多条sql语句、存储过程等,计划一栏是定义事件触发时间的。如下图所示:

Mysql定时任务配置详细说明

打开计划栏:

Mysql定时任务配置详细说明

上图的参数说明:

AT:表示该事件只执行一次,可以设置一个具体的时间,也可以如图中current_timestamp代表当前时间(默认),后面可以加上一个时间间隔INTERVAL,表示在这个时间多久以后后事件发生,表示延迟触发时间。

EVERY:循环执行该事件,其中STARTS子句用于指定开始时间。

ENDS:子句用于指定结束时间。

INTERVAL:表示从现在开始时间延迟多久以后的一个时间点,其值由一个数值和单位构成。例如,使用“1 week”表示41周后;使用“‘6:30' hour_minute”表示6小时30分钟后。事件的间隔的距离用date_add()函数来支配。

补充说明:INTERVAL中包含的时间单位如下:

year | quarter | month | day | hour | minute | week | second | year_month | day_hour | day_minute | day_second | hour_minute | hour_second | minute_second

举例1:往testdata表中插入2行数据,执行时间:2023-01-16 15:00:00

Mysql定时任务配置详细说明

点击保存,输入定义的事件名。

上面定义的时间过后,查询结果如下图所示:

Mysql定时任务配置详细说明

举例2:从当前开始,每5秒往testdata表中插入2行数据,如下图所示:

Mysql定时任务配置详细说明