• MySQL8.0 定时任务EVENT


    MySQL8.0 定时任务EVENT

    1.配置环境

    检查是否已开启该功能

    SHOW VARIABLES LIKE ‘event_scheduler’;

    mysql> SHOW VARIABLES LIKE 'event_scheduler';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | event_scheduler | ON    |
    +-----------------+-------+
    1 row in set (0.01 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    开启计划任务功能:

    SET GLOBAL event_scheduler = 1;

    SET GLOBAL event_scheduler = ON;

    2.命令

    (1)创建定时任务event
    CREATE
        [DEFINER = user]
        EVENT
        [IF NOT EXISTS]
        event_name
        ON SCHEDULE schedule
        [ON COMPLETION [NOT] PRESERVE]
        [ENABLE | DISABLE | DISABLE ON SLAVE]
        [COMMENT 'string']
        DO event_body;
     
    schedule:
        AT timestamp [+ INTERVAL interval] ...
      | EVERY interval
        [STARTS timestamp [+ INTERVAL interval] ...]
        [ENDS timestamp [+ INTERVAL interval] ...]
     
    interval:
        quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
                  WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
                  DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    分为6个部分:
    (1)单次计划任务: AT 时戳 ,一次性任务
    (2)重复的计划任务 EVERY 时间(单位)的数量,时间单位 [STARTS 时戳][ENDS 时戳] 。
    在两种计划任务中,时戳可以是任意的TIMESTAMP 和DATETIME 数据类型,要求提供的是将来的时间(大于CURRENT_TIMESTAMP),而且小于Unix时间的最后时间(等于或小于’2037-12-31 23:59:59’)
    时间单位是关键词:
    YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND
    (3)[ON COMPLETION [NOT] PRESERVE] COMPLETION 当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而声明PRESERVE的作用是使事件在执行完毕后不会被Drop掉
    (4)[ENABLE|DESABLE] ENABLE 开启事件 DESABLE 关闭事件
    (5)COMMENT 注释
    (6)DO sql_statement 执行的sql语句

    (2)维护定时任务event

    删除定时任务

    drop event if exists event_name;
    
    • 1

    设置定时任务启动、关闭

    alter event event_name disable;
    alter event event_name enable;
    
    • 1
    • 2

    3.测试

    创建测试表

    create table evt_insert_test (timeline timestamp,randstr varchar(16));
    
    • 1

    创建定时任务,每隔一秒插入数据

    create event e_test_insert
     on schedule every 1 second 
      starts '2023-10-12 00:00:00'
      do 
    	begin
    	insert into evt_insert_test values (current_timestamp,left(uuid(), 16));
    	commit;
    	end;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    检查任务:

    mysql> show events\G;
    *************************** 1. row ***************************
                      Db: bigdatashow
                    Name: e_test_insert
                 Definer: root@%
               Time zone: +08:00
                    Type: RECURRING
              Execute at: NULL
          Interval value: 1
          Interval field: SECOND
                  Starts: 2023-10-12 00:00:00
                    Ends: NULL
                  Status: ENABLED
              Originator: 1
    character_set_client: utf8mb4
    collation_connection: utf8mb4_0900_ai_ci
      Database Collation: utf8mb4_0900_ai_ci
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    每隔一小时执行一次存储过程。

    create event e_test_procedure
     on schedule every 1 hour 
      starts '2023-10-12 00:00:00'
      do 
    	begin
    		call pro_test_var;
       end;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    linux下gcc编程11-window下clion编译调试nginx+集成lua-nginx-module+安装开源x-waf
    C# 32应用程序获取64位操作系统注册表
    老板叫我把几十万条Excel数据录入系统
    【MongoDB】Ubuntu22.04 下安装 MongoDB | 用户权限认证 | skynet.db.mongo 模块使用
    使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略
    22字符串-简单反转
    React + 项目(从基础到实战) -- 第九期
    卷起来!阿里高工携 18 位高级架构师耗时 57 天整合的 1658 页面试总结
    关于数据权限的设计
    y112.第六章 微服务、服务网格及Envoy实战 -- Envoy网格安全(二三)
  • 原文地址:https://blog.csdn.net/qq_39065491/article/details/133786507