当前位置: 首页 > 后端技术 > Java

msql定时任务

时间:2023-04-01 15:31:56 Java

转载原文链接https://blog.csdn.net/dong_lo...mysql定时执行sql首先应该检查mysql是否开启了定时任务showvariableslike'%event_sche%';OFF表示未启用,这里是ON表示已开启。如果是OFF,需要开启setglobalevent_scheduler=1;0-表示关闭,1-表示开启,修改时注意权限问题Createastoredprocedureusedemo;delimiter//createproceduredemo_pro()begin--(begin后,end//放入要定时处理的sql;最后,你可以放多个sql)updateapp01_dnsinfosetsniff_time=DATE_ADD(NOW(),INTERVALFLOOR(1+(RAND()*10800))SECOND);end//delimiter;(1).usedemo;:这个大家都知道,用到某个数据库,这里要强调一下,存储过程必须是针对某个数据库的,所以必须选择一个数据库才能创建成功。(2).定界符//:这是修改以;结尾的规则(分号)在MySQL中以//(双斜杠)作为语句终止符,因为存储过程中可以有多个sql语句。所有的sql语句都以;结尾符号。如果回车,系统会直接将其作为sql语句执行。我们希望的是先定义这一系列的sql语句,而不是先执行,所以我们需要改变终止符。当然,改了之后一定要改回来。你可以在最后一行看到相应的修改语句。(3).下面显示的语句一起输入。可以知道创建了存储过程demo_pro(),名字随便起,在begin--end之间可以定义一系列的sql语句,记住最后一个end的结尾要以之前修改的结束结束字符//。删除存储过程DROPPROCEDUREdemo_pro创建定时任务上面的存储过程的创建实际上是为定时任务做铺垫,因为上面只说明了如何创建存储过程,并没有说明如何调用,所以这里使用存储过程。--创建定时任务demo01createeventdemo01--每天凌晨1点开始执行ONSCHEDULEEVERY1DAYSTARTSDATE_ADD(DATE_ADD(CURDATE(),INTERVAL1DAY),INTERVAL1HOUR)oncompletionpreservedisable--task使用demo_pro()作为执行体调用demo_pro();第一行createeventdemo01是创建一个名为demo01的事件,注意这里没有括号;第二行是创建周期定时规则,意思是每天执行一次;第三行oncompletionpreservedisable表示创建后不生效;第四行docalldemo_pro()是事件(event)的操作内容,也就是调用我们刚刚创建的demo_pro()存储过程。检查定时任务是否设置,启动SELECTevent_name,event_definition,interval_value,interval_field,statusFROMinformation_schema.EVENTS;打开和关闭定时任务--打开和关闭创建的事件--打开定时任务ALTEREVENTdemo01ONCOMPLETIONPRESERVEENABLE;--关闭定时任务ALTEREVENTdemo01ONCOMPLETIONPRESERVEDISABLE;删除定时任务掉落事件demo01;allsql--检查是否启用了定时策略showvariableslike'%event_sche%';--启用定时策略(ON为开启状态)setglobalevent_scheduler=1;--Createprocedure(存储过程)use123;delimiter//createprocedureupdateTime()beginupdatedemo_tablesetdemo_time=DATE_ADD(NOW(),INTERVALFLOOR(1+(RAND()*10800))SECOND);end//delimiter;--创建计划任务createeventupdateTime_LYONSCHEDULEEVERY1DAYSTARTSDATE_ADD(DATE_ADD(CURDATE(),INTERVAL1DAY),INTERVAL1HOUR)oncompletionpreservedisableocallupdateTime();--查看计划任务EventSELECTevent_name,event_definition,interval_value,interval_field,statusFROMinformation_schema.EVENTS;--打开和关闭创建的事件altereventupdateTime_LYoncompletionpreserveenable;//启用定时任务altereventupdateeTime_LYoncompletionpreservedisable;//关闭定时任务--deletedropeventupdateTime_LY;详细解释(1)event_scheduler的修改会随着数据库服务器的重启恢复到原来的状态,配置文件my.添加以下行配置[mysqld]event_scheduler=ON(2),proceduredelimiter//这表示结束语句;修改为以//结尾,可以保证多条语句完整执行,最后我们使用定界符;将结束符修改回来(3),为任务的执行方式添加几个时间控制--单位分别是:SECOND,MINUTE,HOUR,DAY,WEEK(星期),QUARTER(季度),MONTH,YEAR--execute1timepersecondONSCHEDULEEVERY1SECOND--每两分钟执行1次ONSCHEDULEEVERY2MINUTE--每3天执行1次ONSCHEDULEEVERY3DAY--ExecuteONSCHEDULEATCURRENT_TIMESTAMP()+INTERVALafter5days5DAY--ExecuteONSCHEDULEATCURRENT_TIMESTAMP()+INTERVAL10分钟后ONSCHEDULEAT'2021-12-011:50:00'--2016年10月1日晚上9点50分执行5天后每天执行直到下个月月底ONSCHEDULEEVERY1DAYSTARTSCURRENT_TIMESTAMP()+INTERVAL5DAYENDSCURRENT_TIMESTAMP()+INTERVAL1MONTH--从现在开始每天执行ONSCHEDULEEVERY1DAYENDSCURRENT_TIMESTAMP()+INTERVAL5DAY--每天凌晨1点执行ONSCHEDULEEVERY1DAYSTARTSDATE_ADD(DATE_ADD(CURDATE(),INTERVAL1天),间隔1小时)--每个月ONSCHEDULEEVERY5MONTHSTARTSDATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVALDAY(CURDATE())-1DAY),INTERVAL1MONTH),INTERVAL1HOUR)--第五天1点执行一次每年1月1日凌晨3点执行一次ONSCHEDULEEVERY1YEARSTARTSDATE_ADD(DATE(CONCAT(YEAR(CURDATE())+1,'-',1,'-',1)),INTERVAL3HOUR)