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

 

数据需求:
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;

结果如图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zuozewei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值