zoukankan      html  css  js  c++  java
  • MySql 定时任务的使用

    MySql 定时任务的使用

    by:授客 QQ1033553122

    简介

      自 MySQL5.1.6起,增加了一个非常有特色的功能事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录、对数据进行汇总等等),来取代原先只能由操作系统的计划任务来执行的工作。更值得一提的是MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRONWindows下的任务计划)只能精确到每分钟执行一次。对于一些对数据实时性要求比较高的应用(例如:股票、赔率、比分等)就非常适合。

     

    操作:

    1,开启event_scheduler计划。

    1

    新建查询,执行语句:set GLOBAL event_scheduler = 1;

     

    2:编辑my.cnf,进入mysql安装目录,找到my.cnf配置文件,在文件中添加event_scheduler = 1

    示例(linux下)

    builder:~# find / -name my.cnf

    /mnt/mysql/my.cnf

    builder:~# cd /mnt/mysql/   

    builder:/mnt/mysql# vi my.cnf

    ……

      

    2,要查看当前是否已开启事件调度器

    执行如下SQL

    1sql查询器中:show variables like 'event_scheduler';

    MySql <wbr>定时任务的使用

     

    2sql查询器中:select @@event_scheduler;

    MySql <wbr>定时任务的使用

     

    3show processlist; 

     

    MySql <wbr>定时任务的使用

    3,创建事件(create event)

    语法:  

    CREATE EVENT [IFNOT EXISTS] event_name

       ONSCHEDULE schedule

       [ONCOMPLETION [NOT] PRESERVE]

       [ENABLE | DISABLE]

       [COMMENT 'comment']

       DO sql_statement;

    注:

    schedule:

       AT TIMESTAMP [+ INTERVAL INTERVAL]

       | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
      

    INTERVAL:

    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |

    WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE

    | DAY_SECOND | HOUR_MINUTE | OUR_SECOND | MINUTE_SECOND} 

    [ENABLE | DISABLE]:设置该事件创建后状态是否开启或关闭,默认为ENABLE

    [COMMENT ‘comment’]:可以给该事件加上注释。

     

    4,修改事件(ALTER EVENT)

    语法:

    ALTER EVENT event_name

       [ONSCHEDULE schedule]

       [RENAME TOnew_event_name]

       [ONCOMPLETION [NOT] PRESERVE]

       [COMMENT 'comment']

       [ENABLE | DISABLE]

       [DO sql_statement]

     

    5,删除事件(DROP EVENT)

    语法:

    DROP EVENT [IF EXISTS] event_name

    6,举例

    #查看数据库版本[5.1.6]

    select version();

     

    #开启evenet_sheduler进程

    set GLOBAL event_scheduler = 1;

     

    #查看当前是否已开启事件调度器

    #1

    show variables like 'event_scheduler';

    #2

    select @@event_scheduler;

    #3

    show processlist;

     

    #查看当前数据库中所有事件

    show events;

     

    #查看所有数据库中所有事件

    #1

    select * from mysql.event;

    #2

    select * from information_schema.events

     

    #创建定时任务

    #1.测试环境搭建

    #1.1查看存在那些数据库

    show databases;

     

    #1.2进入数据库

    use test;

     

    #1.3查看表

    show tables;

     

    #1.4创建测试表student

    create table student

    (

      num integer,

      name varchar(6),

      addr varchar(10),

      comment varchar(15)

    )

     

    #1.5显示表结构

    desc student;

     

    #1.6插入数据

    insert into student values(1,'lili','noaddr','nocomment');

    insert into student values(2,'xiaoli','noaddr','nocomment');

    insert into student select * from student;

     

    #2创建定时清理任务

    #2.13秒清理一次表

    create event if not exists e_delete

    on schedule every 3 second

    do truncate table test.student;

    #查看效果

    select * from test.student;

     

    #2.2每天插入1条数据

    create event e_insert

    on schedule every 1 day

    do insert into test.student values(3,'test','noaddr','nocoment');

     

    #2.3五天后清空表

    create event e_truncate

    on schedule at current_timestamp + interval 5 day

    do truncate table test.student;

     

    #20121112121212秒清空表

    create event e_truncate

    on schedule at timestamp '2012-11-12 12:12:12'

    do truncate table test.student;

     

    #1天执行一次清空表

    create event e_truncate

    on schedule every 1 day

    do truncate table test.student;

     

    #五天后开启每天执行一次清空表

    create event e_truncate

    on schedule every 1 day

    starts current_timestamp + interval 5 day

    do truncate table test.student;

     

    #五天后停止每天执行一次清空表

    create event e_truncate

    on schedule every 1 day

    ends current_timestamp + interval 5 day

    do truncate table test.student;

     

    #五天后开启每天执行一次清空表,1个月后停止

    create event e_truncate

    on schedule every 1 day

    starts current_timestamp + interval 5 day

    ends current_timestamp + interval 1 month

    do truncate table test.student;

     

    #每天执行一次清空表,执行完后终止事件,以后都不执行了

    create event e_truncate

    on schedule every 1 day

    on completion not preserve

    do truncate table test.student;

       

    #3临时关闭事件

    use test;

    alter event e_delete disable;

     

    #注意:禁用定时功能后,当你重新启动mysql服务时,该定时功能可能被删除。查看是否被删除语句如下

    show events;

     

    #4开启事件

    use testdb;

    alter event e_delete enable;

     

    #5修改事件,如改为每5天清理一次

    alter event e_delete

    on schedule every 5 day

    do truncate table table_name;

     

    #6永久删除事件

    use testdb;

    drop event if exists e_delete;

  • 相关阅读:
    Hdu 1257 最少拦截系统
    Hdu 1404 Digital Deletions
    Hdu 1079 Calendar Game
    Hdu 1158 Employment Planning(DP)
    Hdu 1116 Play on Words
    Hdu 1258 Sum It Up
    Hdu 1175 连连看(DFS)
    Hdu 3635 Dragon Balls (并查集)
    Hdu 1829 A Bug's Life
    Hdu 1181 变形课
  • 原文地址:https://www.cnblogs.com/shouke/p/10158020.html
Copyright © 2011-2022 走看看