小编给大家分享一下Linux下实现Mysql定时任务的案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

假设前提:每天晚上10点到早上5点,每10分钟定时执行存储过程。

实现方式:

第一种是利用Mysql本身实现,制定event定时任务,可以借助Navicat For Mysql或其他数据库开发工具去做;
第二种实现方式是利用linux的定时任务,这个是利用Linux系统自带任务管理工具实现的。

一、Mysql中event定时任务的相关命令,

1.查看event是否启用:

SELECT@@event_scheduler;或SHOWVARIABLESLIKE'event%';

2.开启定时任务:

setGLOBALevent_scheduler=1;或SETGLOBALevent_scheduler=ON;

3.建立定时任务:

DROPEVENTIFEXISTSJOB_ALARM;CREATEEVENTJOB_ALARMONSCHEDULEEVERY10MINUTEDOBEGINif(date_format(current_time(),'%H')>22||date_format(current_time(),'%H')<5)THENCALLPRO_ALARM();ENDIF;END

4.建立存储过程:

DROPPROCEDUREIFEXISTSPRO_ALARM;CREATEPROCEDUREPRO_ALARM()BEGINDECLAREuserIdVARCHAR(32);#这个用于处理游标到达最后一行的情况DECLAREsINTDEFAULT0;#声明游标cursor_name(cursor_name是个多行结果集)DECLAREcursor_dataCURSORFORSELECTtmp.USER_IDFROM(SELECTe.USER_ID,MAX(e.TIME_GMT)TIME_GMTFROMEVENTSeGROUPBYe.USER_IDHAVINGMAX(e.TIME_GMT)<UNIX_TIMESTAMP()-60*30ANDMAX(e.TIME_GMT)>UNIX_TIMESTAMP()-60*60*24)tmpINNERJOINEVENTStONtmp.USER_ID=t.USER_IDANDtmp.TIME_GMT=t.TIME_GMTWHERETYPE_ID!='34001';#设置一个终止标记DECLARECONTINUEHANDLERFORSQLSTATE'02000'SETs=1;OPENcursor_data;#获取游标当前指针的记录,读取一行数据并传给变量a,bFETCHcursor_dataINTOuserId;#开始循环,判断是否游标已经到达了最后作为循环条件WHILEs<>1DOINSERTINTOEVENTS_NOTIFICATIONVALUES(NULL,SYSDATE(),UNIX_TIMESTAMP(SYSDATE()),UNIX_TIMESTAMP(SYSDATE()),'00000',userId,'1','0');#读取下一行的数据FETCHcursor_dataINTOuserId;ENDWHILE;#关闭游标CLOSEcursor_data;END;

二、利用linux的定时任务,

linux定时任务基本命令:

查看定时任务:crontab -l
编辑定时任务:crontab -e

*/10 22-23,0-5 * * * mysql -u用户名 -p密码 -e "use db_name;CALL PRO_ALARM();"

或者把use db_name;CALL PRO_ALARM();存到sql脚本中,编辑定时任务如下:

*/10 22-23,0-5 * * * mysql -u用户名 -p密码 < /application/Job_mysql.sql

以上是“Linux下实现Mysql定时任务的案例”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!