MySQL可视化所有存储表采集时间需要每天更新为当天的时间
实现策略:
Mysql它的事件调度器Event Scheduler是在mysql 5.1才开始引入事件调度器是在 MySQL 5.1中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能。事件调度器是定时触发执行的,在这个角度上也可以称作是"临时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。
江苏高法可视化使用的MySQL的版本是MySQL 5.6.35,所以我们可以考虑通过事件调度器实现定时计划,通过存储过程批量完成所有存储表的采集时间更新操作。
实现步骤:
1.开启定时任务
#查看event是否开启,为0是未启用 SHOW VARIABLES LIKE '%event_sche%'; #将事件计划开启,为1是启用 SET GLOBAL event_scheduler = 1; SHOW VARIABLES LIKE '%event_sche%';
2.创建批量更新存储表系统时间存储过程
USE eepm_push; DROP PROCEDURE IF EXISTS TestPro; DELIMITER $ CREATE PROCEDURE TestPro() BEGIN DECLARE TableName VARCHAR(64); /* 声明游标 */ DECLARE cur_FountTable CURSOR FOR SELECT u.TABLE_NAME FROM INFORMATION_SCHEMA.TABLES u WHERE u.TABLE_NAME LIKE 'Z_%'; /* 异常处理 */ DECLARE EXIT HANDLER FOR NOT FOUND CLOSE cur_FountTable; /* 打开游标 */ OPEN cur_FountTable; REPEAT FETCH cur_FountTable INTO TableName; SET @SQLSTR1 = CONCAT('update ',TableName,' SET gathertime = NOW()'); PREPARE STMT1 FROM @SQLSTR1; EXECUTE STMT1; DEALLOCATE PREPARE STMT1; UNTIL 0 END REPEAT; /* 关闭游标 */ CLOSE cur_FountTable; END $ DELIMITER; #调用存储过程,检查是否修改成功 CALL TestPro();
3.创建事件任务
#每天凌晨执行存储过程,从当天开始,每天执行一次 CREATE EVENT IF NOT EXISTS e_test ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(CONCAT(CURRENT_DATE(), ' 00:00:00'), INTERVAL 0 SECOND) ON COMPLETION PRESERVE ENABLE DO CALL TestPro();
4.查看事件计划
#查看事件任务 SHOW EVENTS;
结果如图: