随笔 - 5  文章 - 0  评论 - 26  阅读 - 11万

mysql-常用组件之定时器

定时器主要用于定时的执行一次或者循环执行一条sql,在实际场景上,例如,定期清理数据表,定期导出日志文件等等场景。本次公司晚上维护系统,晚上需要定期挂维护页,用到了定时器,这里简单总结一下。

启用定时器

MySQL event 功能默认是关闭的,可以使用下面的语句来看 event 的状态,如果是 OFF 或者 0,表示是关闭的。

  • 检查命令
SHOW VARIABLES LIKE 'event_scheduler';
  • 定时器已经开启的执行结果:
开启成功示例.png
如果未开启定时器,执行以下命令开启定时器:
SET GLOBAL event_scheduler = 1;
注意:虽然这里用 set global event_scheduler = on 语句开启了事件,但是每次重启服务器或重启 mysql 服务后,事件会自动关闭(event_scheduler=OFF),所以想让事件一直保持开启,最好修改配置文件,让 mysql 服务启动的时候开启时间,只需要在 my.cnf 配置文件的 [mysqld] 部分加上 event_scheduler=ON 即可:
设置定时器自启动.png
  • 关闭定时器命令:
  • SET GLOBAL event_scheduler = 0;

    创建定时器

    创建定时器 SQL 模板:

    DELIMITER $$
    -- SET GLOBAL event_scheduler = ON$$ -- required for event to execute but not create
    CREATE /*[DEFINER = { user | CURRENT_USER }]*/ EVENT `dbName`.`eventName` -- 事件名
    ON SCHEDULE
    /* uncomment the example below you want to use */
    -- scheduleexample 1: run once 只执行一次
    -- AT 'YYYY-MM-DD HH:MM.SS'/CURRENT_TIMESTAMP { + INTERVAL 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] }
    -- scheduleexample 2: run at intervals forever after creation 创建完后周期性执行
    -- EVERY 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...]
    -- scheduleexample 3: specified start time, end time and interval for execution 指定开始和结束时间,并在期间内周期性的执行
    /*EVERY 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...]
    STARTS CURRENT_TIMESTAMP/'YYYY-MM-DD HH:MM.SS' { + INTERVAL 1[HOUR|MONTH|WEEK|DAY|MINUTE|...] }
    ENDS CURRENT_TIMESTAMP/'YYYY-MM-DD HH:MM.SS' { + INTERVAL 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] } */
    /*[ON COMPLETION [NOT] PRESERVE] -- 时间完成后是否删除事件
    [ENABLE | DISABLE] -- 是否立即生效
    [COMMENT 'comment']*/
    DO
    BEGIN
    (sql_statements) -- 需要周期性执行的 sql 语句
    END$$
    DELIMITER ;
    • 注意
    1. DELIMITER $$ 这个是将mysql中以 ; 结尾的规定修改为以 $$ 为语句结束符,因为存储过程里可以有多条 sql 语句,里面的 sql 语句都以 ; 结尾,如果回车了那么系统会当做 sql 语句直接执行了,我们希望的是先定义这一系列 sql 语句而先不执行,所以要改下操作结束符。当然你在改后一定要改回来,大家可以看到最后一行有对应的修改回来的语句。

    2. 如果需要周期性执行的语句也可用存储过程来代替,使用 DO CALL procedure() 语句来代替。

    3. 设置定时器事件的生效与否语句:

    ALTER EVENT event_minute DISABLE; # 关闭事件
    ALTER EVENT event_minute ENABLE; # 启用事件

    举例

    1.从现在开始每隔九天定时执行

    ON SCHEDULE EVERY 9 DAY STARTS NOW() ;

    2.每个月的一号凌晨 1 点执行

    on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour);

    3.每个季度一号的凌晨1点执行

    on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour);
    posted on   兮和  阅读(501)  评论(0编辑  收藏  举报
    编辑推荐:
    · AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
    · 基于Microsoft.Extensions.AI核心库实现RAG应用
    · Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
    · 开发者必知的日志记录最佳实践
    · SQL Server 2025 AI相关能力初探
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · 震惊!C++程序真的从main开始吗?99%的程序员都答错了
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    < 2025年3月 >
    23 24 25 26 27 28 1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 31 1 2 3 4 5

    点击右上角即可分享
    微信分享提示