美文网首页
Navicat书写Mysql定时任务

Navicat书写Mysql定时任务

作者: 心淡然如水 | 来源:发表于2020-10-31 10:37 被阅读0次

    MySQL5.1.6起增加了事件调度器(Event Scheduler),可用来做定时执行某些特定任务,用于取代原先只能由操作系统的计划任务来执行的工作。MySQL的事件调度器可以精确到每秒执行一个任务,而操作系统的计划任务只能精确到分钟级别。对于对数据实时性要求比较高的应用非常合适。

    事件调度器也称为临时触发器(Temporal Triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的。

    MySQL定时任务的实现方式有两种:

    使用MySQL的event定时任务

    使用MySQL的事件计划,首先需要在服务器开启event_scheduler后才能处理。

    使用Linux的定时任务crontab

    如何开启事件计划呢?

    SHOW VARIABLES LIKE 'event_scheduler';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | event_scheduler | OFF   |
    +-----------------+-------+
    1 row in set, 1 warning (0.00 sec)
    

    开启的方式也分为两种,临时方式使用命令行或脚本操作,永久修改则需要修改MySQL主配置文件my.ini在其中添加event_schduler=1的配置后重启MySQL。

    临时性修改只要不重启MySQL在当前运行状态下会直接生效,一旦重启后则失效。

    mysql> SET GLOBAL event_scheduler = ON;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SET @@global.event_scheduler = ON;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SET GLOBAL event_scheduler = 1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SET @@global.event_scheduler = 1;
    Query OK, 0 rows affected (0.00 sec)
    

    要保证能够执行事件,就必须保证事件计划是开启状态,事件计划默认为关闭状态。检查状态

    # 事件计划是否开启
    $ SHOW VARIABLES LIKE 'event%'
    $ SHOW VARIABLES LIKE 'event_scheduler';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | event_scheduler | ON    |
    +-----------------+-------+
    1 row in set
    
    # 查看事件任务是否开启
    $ SELECT @@event_scheduler;
    +-------------------+
    | @@event_scheduler |
    +-------------------+
    | ON                |
    +-------------------+
    1 row in set
    
    # 开启事件计划
    $ SET GLOBAL event_scheduler=1
    $ SET GLOBAL event_scheduler=ON
    duler=1;
    Query OK, 0 rows affected
    
    # 关闭事件计划
    $ SET GLOBAL event_scheduler=0
    

    查看时间任务

    # 查看事件任务
    $ SHOW EVENTS;
    Empty set
    
    # 查看事件任务错误 - 权限不足
    $ SELECT * FROM mysql.event
    1142 - SELECT command denied to user 'username'@'127.0.0.1' for table 'event'
    
    # 开启事件任务
    $ ALTER EVENT event_name ON COMPLETION PRESERVE ENABLE
    
    # 关闭事件任务
    $ ALTER EVENT event_name ON COMPLETION PRESERVE DISABLE
    
    # 删除事件
    $ DROP EVENT [IF EXISTS] event_name
    

    设置定时任务执行SQL语句


    微信截图_20201031103518.png 微信截图_20201031103543.png

    相关文章

      网友评论

          本文标题:Navicat书写Mysql定时任务

          本文链接:https://www.haomeiwen.com/subject/atksvktx.html