MySQL实现定时批量更新存储表采集时间为系统时间

时间:2022-12-04 14:50:59
数据需求:
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;

MySQL实现定时批量更新存储表采集时间为系统时间

结果如图:

MySQL实现定时批量更新存储表采集时间为系统时间