zoukankan      html  css  js  c++  java
  • MySQL Event--Event and EventScheduler

    MySQL Event

    创建EVENT语法:

    CREATE
        [DEFINER = { user | CURRENT_USER }]
        EVENT
        [IF NOT EXISTS]
        event_name
        ON SCHEDULE schedule
        [ON COMPLETION [NOT] PRESERVE]
        [ENABLE | DISABLE | DISABLE ON SLAVE]
        [COMMENT 'comment']
        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}
    
    
    ALTER
        [DEFINER = { user | CURRENT_USER }]
        EVENT event_name
        [ON SCHEDULE schedule]
        [ON COMPLETION [NOT] PRESERVE]
        [RENAME TO new_event_name]
        [ENABLE | DISABLE | DISABLE ON SLAVE]
        [COMMENT 'comment']
        [DO event_body]
    
    DROP EVENT [IF EXISTS] event_name

    DEFINER:指定事件执行时使用的用户账号,当事件执行时,会根据该指定账号的权限来检查事件定于的语句是否有权限执行。如果创建Event时未指定DEFINER,则默认使用创建事件的用户,与显示指定DEFINER=CURRENT_USER相同;

    [ON COMPLETION [NOT] PRESERVE]: 默认Event为一次执行,执行完成后即删除,即NOT PERSERVE;如果希望Event在执行完成后也不删除,那么需指定ON COMPLETION PRESERVE选项。

    [ENABLE | DISABLE | DISABLE ON SLAVE]: 在MYSQL中,Event和表一样归属于某个schema,如果该schema处于主从复制中,那么在主库创建Event后会同步到从库中,但会默认将从库中Event的状态修改为SLAVESIDE_DISABLED,即在从库上不执行。如果在主库上创建Event时指定DISABLE或DISABLE ON SLAVE,那么主库上的Event不会启用。

    MySQL EventScheduler

    使用EventScheduler可以实现类似SQL SERVER中Job相同的功能,定期执行特定脚本。

    在复制中,可以使用SHOW SLAVE STATUS中的Seconds_Behind_Master来判断当前主库到从库的延迟,但如果主库长时间未更新,则会导致Seconds_Behind_Master的值不准确,因此我们可以使用event_scheduler来定期更新主库中的特定表的数据,以保证主库有定期更新。

    操作方法:

    -- 首先判断EventScheduler功能是否开启
    SHOW VARIABLES LIKE 'event_scheduler';
    
    
    -- 开启EventScheduler功能
    SET GLOBAL event_scheduler=ON;
    
    
    -- 在主库上创建用于监控的表并插入数据:
    CREATE TABLE TB_RepMonitor
    (
    ID INT PRIMARY KEY,
    DT DATETIME
    );
    INSERT INTO TB_RepMonitor VALUES(1,NOW());
    
    
    -- 然后创建event_scheduler来定期更新
    DROP EVENT IF EXISTS Event_TB_RepMonitor_Update;
    DELIMITER $$;
    CREATE DEFINER='root'@'localhost'
    EVENT Event_TB_RepMonitor_Update
    ON SCHEDULE EVERY 1 SECOND
    ENABLE
    DO
    BEGIN
    UPDATE testdb1.TB_RepMonitor SET DT=NOW();
    END
    $$;
    DELIMITER ;
    
    
    -- 查看EVENT的状态
    SHOW EVENTS LIKE 'Event_TB_RepMonitor_Update' G
    
    -- 当主库上创建EVENT后,会同步到从库上,并默认将状态修改为SLAVESIDE_DISABLED;
    SHOW EVENTS LIKE 'Event_TB_RepMonitor_Update' G
    
    
    -- 在主库上查看testdb1.TB_RepMonitor表数据'
    -- 这样就可以放心使用SHOW SLAVE STATUS中的Seconds_Behind_Master的值了
    SELECT *,NOW() FROM testdb1.TB_RepMonitor;

    相关操作命令:

    ##==================================##
    ##查看数据库中创建的所有作业##
    select * from information_schema.events G;
    
    ##==================================##
    ##启用作业##
    ALTER EVENT schema.event_name ENABLE
    
    ##==================================##
    ##禁用作业##
    ALTER EVENT schema.event_name DISABLE
    
    ##==================================##
    ##删除作业##
    drop event schema.eventname
  • 相关阅读:
    Centos7 系统别名设置
    C#编程 JSON操作
    C#编程 XML文档
    C#编程 socket编程之TcpClient,TcpListener,UdpClient
    C#编程 socket编程之udp服务器端和客户端
    C#编程 socket编程之unity聊天室
    C#编程 socket编程之tcp服务器端和客户端
    C#编程 线程,任务和同步(2) 开启线程
    C#编程 线程,任务和同步(1) 基础认识
    C#编程 LINQ查询
  • 原文地址:https://www.cnblogs.com/gaogao67/p/10726632.html
Copyright © 2011-2022 走看看