Linux下如何实现Mysql定时任务
假设前提:每天晚上10点到早上5点,每10分钟定时执行存储过程。
实现方式:
第一种是利用Mysql本身实现,制定event定时任务,可以借助NavicatForMysql或其他数据库开发工具去做;
第二种实现方式是利用linux的定时任务,这个是利用Linux系统自带任务管理工具实现的。
一、Mysql中event定时任务的相关命令,
1.查看event是否启用:
SELECT@@event_scheduler; 或 SHOWVARIABLESLIKE'event%';
2.开启定时任务:
setGLOBALevent_scheduler=1; 或 SETGLOBALevent_scheduler=ON;
3.建立定时任务:
DROPEVENTIFEXISTSJOB_ALARM; CREATEEVENTJOB_ALARM ONSCHEDULEEVERY10MINUTE DO BEGIN if(date_format(current_time(),'%H')>22||date_format(current_time(),'%H')<5)THEN CALLPRO_ALARM(); ENDIF; END
4.建立存储过程:
DROPPROCEDUREIFEXISTSPRO_ALARM; CREATEPROCEDUREPRO_ALARM() BEGIN DECLAREuserIdVARCHAR(32); #这个用于处理游标到达最后一行的情况 DECLAREsINTDEFAULT0; #声明游标cursor_name(cursor_name是个多行结果集) DECLAREcursor_dataCURSORFOR SELECTtmp.USER_ID FROM( SELECT e.USER_ID, MAX(e.TIME_GMT)TIME_GMT FROMEVENTSe GROUPBYe.USER_ID HAVINGMAX(e.TIME_GMT)UNIX_TIMESTAMP()-60*60*24)tmp INNERJOINEVENTStONtmp.USER_ID=t.USER_ID ANDtmp.TIME_GMT=t.TIME_GMT WHERETYPE_ID!='34001'; #设置一个终止标记 DECLARECONTINUEHANDLERFORSQLSTATE'02000'SETs=1; OPENcursor_data; #获取游标当前指针的记录,读取一行数据并传给变量a,b FETCHcursor_data INTOuserId; #开始循环,判断是否游标已经到达了最后作为循环条件 WHILEs<>1DO INSERTINTOEVENTS_NOTIFICATIONVALUES(NULL,SYSDATE(),UNIX_TIMESTAMP(SYSDATE()), UNIX_TIMESTAMP(SYSDATE()),'00000',userId,'1','0'); #读取下一行的数据 FETCHcursor_data INTOuserId; ENDWHILE; #关闭游标 CLOSEcursor_data; END;
二、利用linux的定时任务,
linux定时任务基本命令:
查看定时任务:crontab-l
编辑定时任务:crontab-e
*/1022-23,0-5*** mysql-u用户名-p密码-e"usedb_name;CALLPRO_ALARM();"
或者把usedb_name;CALLPRO_ALARM();存到sql脚本中,编辑定时任务如下:
*/1022-23,0-5*** mysql-u用户名-p密码
总结
以上所述是小编给大家介绍的Linux下如何实现Mysql定时任务,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!