Mysql查看自动执行任务 |
您所在的位置:网站首页 › 如何查看定时任务是否启动 › Mysql查看自动执行任务 |
MYSQL5.1开始支持EVENT功能,类似Oracle和MSSQL的定时任务job功能。有了这个功能之后我们就可以让MySQL自动的执行存储过程来实现数据汇总等功能了,不用像以前哪样手动操作完成了。下面我们来测试下,在MYSQL中如何自动执行指定存储过程,实现相关功能。 一、创建测试表 CREATE TABLE EVENT_table( id INT auto_increment PRIMARY KEY NOT NULL, conent VARCHAR(80) )ENGINE=INNODB DEFAULT CHARSET=utf8; 二、创建调用存储过程 DROP PROCEDURE IF EXISTS pr_event; CREATE PROCEDURE pr_event( ) proc_start:BEGIN INSERT INTO EVENT_table(conent) VALUES ('520'); END proc_start 三、创建事件调用存储过程 创建事件语法: CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE SCHEDULE [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement; 要使定时事件起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1。 1、查看scheduler的当前状态: a、SHOW VARIABLES LIKE 'event_scheduler'; b、SELECT @@event_scheduler; 2、修改scheduler状态为打开(0:off , 1:on): SHOW VARIABLES LIKE 'event_scheduler';-- 查看是否开启定时器(OFF:关闭,ON:开启) 打开定时器(四种方式): a、SET GLOBAL event_scheduler=ON; b、SET @@global.EVENT_scheduler=ON; c、SET GLOBAL event_scheduler=1; d、SET @@global.event_scheduler=1; 3、创建事件,设置每10分钟执行一次(调用pr_event存储过程)。 CREATE EVENT IF NOT EXISTS ent_test ON SCHEDULE EVERY 10 MINUTE -- ON COMPLETION PRESERVE -- 当EVENT到期时,EVENT会被disable,但是该EVENT还是会存在 -- ON COMPLETION NOT PRESERVE -- 当EVENT到期时,该EVENT会被自动删掉,该项为默认值 DO CALL pr_event(); -- pr_event()为需要定时处理的存储过程,这里也可以改成相关SQL可执行语句 4、开启事件 ALTER EVENT ent_test ENABLE; 5、临时关闭事件 ALTER EVENT ent_test DISABLE; 6、重命名事件并加上备注 ALTER EVENT test.ent_test RENAME TO ent_test_new COMMENT '重命名事件ent_test'; 7、删除事件 DROP EVENT IF EXISTS ent_test; 8、查看指定事件的详细信息 SELECT * FROM information_schema.EVENTS WHERE event_name='ent_test'; SELECT * FROM information_schema.EVENTS WHERE event_name LIKE CONCAT('%','ent_test','%'); 9、查看事件的创建SQL语句 SHOW CREATE EVENT ent_test; 四、一些典型应用示例: 1、从现在开始每隔九天定时执行 CREATE EVENT EVENT1 ON SCHEDULE EVERY 9 DAY STARTS NOW() ON COMPLETION PRESERVE ENABLE DO BEGIN CALL TOTAL(); END 2、每个月的一号凌晨1 点执行 CREATE EVENT EVENT2 ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),INTERVAL 1 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL STAT(); END 3、每个季度一号的凌晨2点执行 CREATE EVENT TOTAL_SEASON_EVENT 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 2 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL SEASON_STAT(); END 4、每年1月1号凌晨四点执行 CREATE EVENT TOTAL_YEAR_EVENT ON SCHEDULE EVERY 1 YEAR STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE()) + 1,'-',1,'-',1)),INTERVAL 4 HOUR) ON COMPLETION PRESERVE ENABLE DO BEGIN CALL YEAR_STAT(); END MySQL的event和Oralce的Job还是有点不同的,这点让笔者比较困扰 5、在进行按月,季,年进行自动调用存储过程时,为了测试可以把系统改为年的最后一天,如2010-12-31 23:59:55; 这个Oracle的Job就会把月,季,年存储过程执行一遍。但MySQL改了系统时间了Event也没有定时执行。不知道各位大虾有没有什么好办法?可以解决这个问题。 五、查看事件运行基本信息 SELECT * FROM information_schema.events ORDER BY last_executed DESC SELECT * FROM mysql.event ORDER BY last_executed DESC SHOW EVENTS |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |