之前没用过数据库的定时任务;
程序中有线程池的定时任务,现需要表的关联任务,使用Navicat中加了定时任务和几个函数,没有执行定时的事件。
全过程总结如下:
0. mysql -u root -p
use ***
1. 查看当前是否已开启事件调度器;ON和OFF
SHOW VARIABLES LIKE 'event_scheduler';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | ON |
+-----------------+-------+
1 row in set (0.01 sec)
2.必须确保 event_scheduler 已开启,执行 :
SET GLOBAL event_scheduler = 1;
# 或
SET GLOBAL event_scheduler = ON;
3.查询定时任务
select *from mysql.event
# 或
SELECT * FROM information_schema.events;
4.定时任务设定
-- 首先删除
DROP EVENT
IF EXISTS ***;
-- 创建
CREATE EVENT ***
ON -- 时间
ON COMPLETION PRESERVE ENABLE DO
-- 执行的函数
CALL CheckCountDaily ();
以每天00:00为例
CREATE EVENT Event_Update_CheckCount
ON SCHEDULE EVERY 1 DAY STARTS date_add(date(curdate() + 1),INTERVAL 0 HOUR)
ON COMPLETION PRESERVE ENABLE DO
CALL CountDaily ();
5.关键:关闭和打开事件
关闭事件 :
alter event *** disable;
开启事件 :
alter event *** enable;
alter event Event_Update_CheckCount enable
注:mysql服务重启或者断电,会出现事件调度器被关闭的情况,事件不起作用,要想解决,
需要在mysql.ini文件中加入event_scheduler = ON; 的语句