zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

MySQL定时执行脚本(计划任务)命令实例

mysql实例执行命令 脚本 任务 计划 定时
2023-06-13 09:15:06 时间

查看event是否开启

复制代码代码如下:


showvariableslike"%sche%";

将事件计划开启

复制代码代码如下:

setglobalevent_scheduler=1;

 

创建存储过程test

 

复制代码代码如下:
CREATEPROCEDUREtest()
BEGIN
updateexaminfoSETendtime=now()WHEREid=14;
END;

创建evente_test

复制代码代码如下:
createeventifnotexistse_test
onscheduleevery30second
oncompletionpreserve
docalltest();

每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.

关闭事件任务

复制代码代码如下:
alterevente_testON
COMPLETIONPRESERVEDISABLE;

开户事件任务

复制代码代码如下:
alterevente_testON
COMPLETIONPRESERVEENABLE;

以上测试均成功,测试环境为mysql5.4.2-beta-communitymysqlcommunityserver(GPL)

以上的相关内容就是对MySQL定时执行的介绍,望你能有所收获。

mysql计划任务重启后消失

我们只要修改一配置即可

event_scheduler在mysql的config中设置为OFF有关。去mysql中将配置改为ON则就搞定了。

更详细的大家可以往下看

MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件、定时任务机制,在指定的时间单元内执行特定的任务,因此今后一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。

要查看当前是否已开启事件调度器,可执行如下SQL:

SHOWVARIABLESLIKE"event_scheduler";

SELECT@@event_scheduler;

SHOWPROCESSLIST;
若显示:

+-----------------+-------+
|Variable_name  |Value|
+-----------------+-------+
|event_scheduler|OFF  |
+-----------------+-------+
则可执行

SETGLOBALevent_scheduler=1;

SETGLOBALevent_scheduler=ON;
来开启,也可以直接在启动命令加上“?event_scheduler=1”,例如:

mysqld...--event_scheduler=1

my.iniormy.cnf中的
[mysqld]
添加event_scheduler=ON

创建事件(CREATEEVENT)
先来看一下它的语法:

CREATEEVENT[IFNOTEXISTS]event_name
ONSCHEDULEschedule
[ONCOMPLETION[NOT]PRESERVE]
[ENABLE|DISABLE]
[COMMENT"comment"]
DOsql_statement;

schedule:
ATTIMESTAMP[+INTERVALINTERVAL]
|EVERYINTERVAL[STARTSTIMESTAMP][ENDSTIMESTAMP]

INTERVAL:
quantity{YEAR|QUARTER|MONTH|DAY|HOUR|MINUTE|
           WEEK|SECOND|YEAR_MONTH|DAY_HOUR|DAY_MINUTE|
           DAY_SECOND|HOUR_MINUTE|HOUR_SECOND|MINUTE_SECOND}

1)首先来看一个简单的例子来演示每秒插入一条记录到数据表

USEtest;
CREATETABLEaaa(timelineTIMESTAMP);
CREATEEVENTe_test_insert
ONSCHEDULEEVERY1SECOND
DOINSERTINTOtest.aaaVALUES(CURRENT_TIMESTAMP);
等待3秒钟后,再执行查询成功。

2)5天后清空test表:

CREATEEVENTe_test
ONSCHEDULEATCURRENT_TIMESTAMP+INTERVAL5DAY
DOTRUNCATETABLEtest.aaa;
3)2007年7月20日12点整清空test表:

CREATEEVENTe_test
ONSCHEDULEATTIMESTAMP"2007-07-2012:00:00"
DOTRUNCATETABLEtest.aaa;
4)每天定时清空test表:

CREATEEVENTe_test
ONSCHEDULEEVERY1DAY
DOTRUNCATETABLEtest.aaa;
5)5天后开启每天定时清空test表:

CREATEEVENTe_test
ONSCHEDULEEVERY1DAY
STARTSCURRENT_TIMESTAMP+INTERVAL5DAY
DOTRUNCATETABLEtest.aaa;

6)每天定时清空test表,5天后停止执行:

CREATEEVENTe_test
ONSCHEDULEEVERY1DAY
ENDSCURRENT_TIMESTAMP+INTERVAL5DAY
DOTRUNCATETABLEtest.aaa;

7)5天后开启每天定时清空test表,一个月后停止执行:

CREATEEVENTe_test
ONSCHEDULEEVERY1DAY
STARTSCURRENT_TIMESTAMP+INTERVAL5DAY
ENDSCURRENT_TIMESTAMP+INTERVAL1MONTH
DOTRUNCATETABLEtest.aaa;
[ONCOMPLETION[NOT]PRESERVE]可以设置这个事件是执行一次还是持久执行,默认为NOTPRESERVE。

8)每天定时清空test表(只执行一次,任务完成后就终止该事件):

CREATEEVENTe_test
ONSCHEDULEEVERY1DAY
ONCOMPLETIONNOTPRESERVE
DOTRUNCATETABLEtest.aaa;
[ENABLE|DISABLE]可是设置该事件创建后状态是否开启或关闭,默认为ENABLE。
[COMMENT‘comment"]可以给该事件加上注释。

修改事件(ALTEREVENT)
ALTEREVENTevent_name
[ONSCHEDULEschedule]
[RENAMETOnew_event_name]
[ONCOMPLETION[NOT]PRESERVE]
[COMMENT"comment"]
[ENABLE|DISABLE]
[DOsql_statement]
1)临时关闭事件

ALTEREVENTe_testDISABLE;
2)开启事件

ALTEREVENTe_testENABLE;
3)将每天清空test表改为5天清空一次:

ALTEREVENTe_test
ONSCHEDULEEVERY5DAY;

删除事件(DROPEVENT)
语法很简单,如下所示:

DROPEVENT[IFEXISTS]event_name
例如删除前面创建的e_test事件

DROPEVENTe_test;
当然前提是这个事件存在,否则会产生ERROR1513(HY000):Unknownevent错误,因此最好加上IFEXISTS

DROPEVENTIFEXISTSe_test;