MariaDB定时事件未按预期设为RECURRING类型的问题排查
MariaDB定时事件调度不符合预期:ONE TIME而非RECURRING问题解决
问题场景
已确认event_scheduler参数已开启为ON,创建定时事件后,执行SHOW EVENTS\G查询发现事件类型为ONE TIME,而非预期的RECURRING。
原创建语句:
CREATE EVENT DeleteExpiredTokens ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY ON COMPLETION PRESERVE DO DELETE LOW_PRIORITY FROM database.remembertokens WHERE set_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
查询结果:
*************************** 1. row *************************** Db: database Name: DeleteExpiredTokens Definer: root@localhost Time zone: SYSTEM Type: ONE TIME Execute at: 2023-01-11 13:03:33 Interval value: NULL Interval field: NULL Starts: NULL Ends: NULL Status: ENABLED Originator: 1 character_set_client: utf8mb4 collation_connection: utf8mb4_general_ci Database Collation: utf8mb4_general_ci 1 row in set (0.001 sec)
曾尝试修改my.cnf相关配置,问题依旧。
问题原因
原语句中ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY是一次性事件的语法,只会在指定的单个时间点执行一次,因此事件类型被识别为ONE TIME,无法实现重复调度的需求。
解决方法
使用EVERY关键字定义重复执行的时间间隔,配合STARTS指定任务开始执行的时间,修改后的语句如下:
CREATE EVENT DeleteExpiredTokens ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP ON COMPLETION PRESERVE DO DELETE LOW_PRIORITY FROM database.remembertokens WHERE set_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
内容的提问来源于stack exchange,提问作者Razeth
相关产品推荐
相关产品推荐

