mysql定时执行任务实现方法
在开发过程中经常会遇到这样一个问题:
每天必须定时去执行一条sql语句 或更新或删除或执行特定的sql语句。
mysql的客户端工具navicat for mysql提供了计划任务的形式,可以很好地实现该功能,而且也确实可行,比如像定时备份就做的很好。
然而当在执行的语句中包含有中文的时候,却无法定时执行了。
那么就想到用mysql的event计划任务去实现:
要想执行event事件,就必须保证mysql的版本的5.1.6以上,否则会报如下错误:
1、要想保证能够执行event事件,就必须保证定时器是开启状态,默认为关闭状态
set global event_scheduler = 1;
或
set global event_scheduler = on;
要查看当前是否已开启事件调度器,可执行如下sql:
show variables like ’event_scheduler’
2、如果原来存在该名字的任务计划则先删除
drop event if exist upload_to_sdmp;
3、执行事件
event事件语法格式:
[sql] view plain copy print?
01.<pre name="code" class="sql">create event [if not exists] event_name
02.on schedule schedule
03.[on completion [not] preserve]
04.[enable | disable]
05.[comment ’comment’]
06.do sql_statement;
07.
08.schedule:
09.at timestamp [+ interval interval]
10.| every interval [starts timestamp] [ends timestamp]
11.
12.interval:
13.quantity {year | quarter | month | day | hour | minute |
14. week | second | year_month | day_hour | day_minute |
15. day_second | hour_minute | hour_second | minute_second}
例如:
-- 设置时区并设置计划事件调度器开启,也可以 event_scheduler = on
[sql] view plain copy print?
01.set time_zone = ’+8:00’;
02.set global event_scheduler = 1;
03.
04.-- 设置该事件使用或所属的数据库base数据库
05.use test;
06.
07.# 如果原来存在该名字的任务计划则先删除
08.drop event if exists upload_to_sdmp;
09.
10.# 设置分隔符为 ’$$’ ,mysql默认的语句分隔符为 ’;’ ,这样在后续的 create 到 end 这段代码都会看成是一条语句来执行
11.delimiter $$
12.# 创建计划任务,设置第一次执行时间为’2014-07-30 10:00:00’,并且每天执行一次
13.create event upload_to_sdmp
14.on schedule every 1 day starts timestamp ’2014-07-30 10:00:00’
15.#on schedule every 1 second
16.do
17.
18.# 开始该计划任务要做的事
19.begin
20.
21.
22.-- do something 编写你的计划任务要做的事
23. insert aaa values (3,’222’);
24. insert aaa values (2,’222’);
25.
26.-- 结束计划任务
27.end $$
28.
29.# 将语句分割符设置回 ’;’
30.delimiter ;
4、查询事件的运行状态
修改事件语法格式:
[sql] view plain copy print?
01.alter event event_name
02.[on schedule schedule]
03.[rename to new_event_name]
04.[on completion [not] preserve]
05.[comment ’comment’]
06.[enable | disable]
07.[do sql_statement]
5、关闭打开事件:
[sql] view plain copy print?
01.关闭事件:
02.alter event upload_to_sdmp disable;
[sql] view plain copy print?
01.开启事件:
02.alter event upload_to_sdmp enable;
6、查询事件是否开启
[sql] view plain copy print?
01.select * from mysql.event
注意:真实的开发环境中,会遇到mysql服务重启或者断电的情况,此时则会出现事件调度器被关闭的情况,所有事件都不在起作用,要想解决这个办法,则需要在mysql.ini文件中加入event_scheduler = on; 的语句
![]() |
豫公网安备 41010202002486号 | ICP备案:豫ICP备18044432号-1 |