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;

原文地址:https://www.cnblogs.com/shouke/p/10158020.html