zoukankan      html  css  js  c++  java
  • MySQL job/定时任务/event 学习

    参考文章:
    https://blog.csdn.net/qq_21108311/article/details/82589850
    https://blog.csdn.net/qq_27238185/article/details/56271877
    https://blog.csdn.net/lxpbs8851/article/details/8019965

    概要简述

    原文链接:https://blog.csdn.net/qq_21108311/article/details/82589850

    MySQL的定时任务(简称job)是可以通过MySQL自身实现的,相比较系统的计划任务,MySQL自身job可以实现秒级定位,即可以精确到秒单位进行任务的执行(系统计划任务一般是分钟);所以MySQL的job在要求精确化的任务上有极大的优势;MySQL 的job官方称为event,MySQL EVENT的原理和触发器非常的相似,区别在于,MySQL的event是系统定时驱动执行,而触发器是通过需求触发进行执行的,两者各有优势。

    MySQL event和触发器一样可以调用存储过程,然而存储过程不能调用event,event只能系统执行,对于执行需求变更,我们只能手动的去调整event。

    创建语法

    --------创建语法
    CREATE 
        [DEFINER = { user | CURRENT_USER }] --一般不写
        EVENT --event标识
        [IF NOT EXISTS] --如果没有就新建,建议不写这一行,确保每个event独立不冲突
        event_name -- 取个event名字
        ON SCHEDULE --计划任务标识
        schedule --计划任务时间,有两个参数(at 和 every),at代表当前一次,every表示每过多少时间执行一次
        [ON COMPLETION [NOT] PRESERVE] --可以不写,默认是ON COMPLETION NOT PRESERVE 即计划任务执行完毕后自动drop该事件;ON COMPLETION  PRESERVE则不会drop
        [ENABLE | DISABLE | DISABLE ON SLAVE] --可以不写,默认状态,默认是启用状态,可以指定为新建关闭状态 
        [COMMENT 'comment'] --注释event,可以不写
        DO --执行语句标识
        event_body; --执行的sql
     
     
     
    --------------------------------------------计划任务可以定义的时间方式:
    schedule: 
        AT timestamp [+ INTERVAL interval] ... --at方式
      | EVERY interval                         --every方式
        [STARTS timestamp [+ INTERVAL interval] ...] --在at/every后可以指定什么时候开始
        [ENDS timestamp [+ INTERVAL interval] ...]  --指定什么时候结束
     
    -------------------------------------------MySQL官方提供的时间字符,可以参考   
    interval: 
        quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | 
                  WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | 
                  DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}  
    

    步骤流程

    在创建job之前,需要做以下几件事:

    1、确保系统的event事件开关是打开的,允许我们创建event;

    2、确保我们创建后是在成功运行的,所以要会查看当前系统有的event

    3、确保我们创建是按照需求来的,如果需要更改,我们要会更改event

    查看当前系统有的event

    -- 查看系统有哪些event事件
    --方法一
    select * from mysql.event;
     
    --方法二
    SELECT * FROM information_schema.events;
    

    查看系统开关

    -- 方法一
    select @@event_scheduler;
     
    --方法二
    show variables like 'event_scheduler';
    

    设置自动启动

    如果value是off或者是0;代表没有开启,我们可以手动开启:

    ### 开启event事件:
    -- 方法1
    set GLOBAL event_scheduler=ON;
    -- 方法2
    set GLOBAL event_scheduler=1;
    

    重启后自动启动

    设置mysql重启后,job能自动启动
    编辑/etc/my.cnf文件,在[mysqld]下添加event_scheduler=1

    mysql server重启之后 也会将 global event_scheduler 设置为 on 要是没有 重启之后 就是off.

  • 相关阅读:
    HashMap和HashSet的区别
    安卓坐标
    android MotionEvent中getX()和getRawX()的区别
    android 布局之滑动探究 scrollTo 和 scrollBy 方法使用说明
    register_chrdev_region/alloc_chrdev_region和cdev注册字符设备驱动
    将JZ2440的调试串口换成com2
    pcl点云文件格式
    C++中的迭代器
    C++中的vector
    “标准差”
  • 原文地址:https://www.cnblogs.com/xcsn/p/11917060.html
Copyright © 2011-2022 走看看