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;

  • 相关阅读:
    通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise
    计量经济学 第四版 课后答案 李子奈 潘文卿 版 课后 练习题答案 高等教育出版社 课后习题答案
    统计学 第四版 课后题答案 袁卫 庞皓 贾俊平 杨灿 版 思考与练习题 课后答案 案例分析 答案与解析
    golang逃逸分析
    通过实例理解Java网络IO模型
    带你逆袭kafka之路
    解决2020-3-27 github无法访问
    图床
    Python彩蛋--zen of python
    python3内置函数大全
  • 原文地址:https://www.cnblogs.com/shouke/p/10158020.html
Copyright © 2011-2022 走看看