1、說明
- 後臺週期定時任務能夠有多種解決方案,我所知道的大概有如下幾種:
- 後臺框架自帶定時任務。好比php中的Laravel框架裏有提供定時任務操做接口,其餘的框架你們能夠單獨針對瞭解。
- 服務器操做系統層面的定時。一般咱們的服務器主要基於兩大平臺,一個windows server,它的定時任務系統有提供的。Linux下也有,一般流行的是crontab工具實現的(想了解這裏有個視頻教程),可是crontab的定時任務一般定時操做腳本這樣的文件,而直接定時操做數據庫的就比較麻煩了。可是也有解決辦法,就是在服務器端寫一個get請求url,在後臺裏完成要定時完成的數據庫操做,這樣咱們只要實現定時訪問該接口就好了,Linux下的curl命令能夠很方便發出get請求,咱們只要寫個包含訪問該接口的腳本,再結合crontab就能夠完成後臺數據的定時更新操做了。
- 可是畢竟寫個接口安全性不是過高,而你們用的若是是mysql數據庫,那就正好能夠利用其自帶的定時操做了,下面簡單介紹mysql定時操做的使用。
2、mysql定時操做
一、查看定時策略是否開啓
1
|
show variables like '%event_sche%';
|
- 顯示的event_scheduler爲OFF時用如下命令開啓
1
|
set global event_scheduler=1;
|
- 注意:以上的改法在數據庫重啓後將會恢復爲原來狀態,要想數據庫重啓後也可讓event_scheduler開啓,則須要在配置文件my.ini的設置。修改以下,而後重啓mysql服務便可。
1 2
|
[mysqld] event_scheduler=ON //這一行加入mysqld標籤下
|
二、建立procedure(存儲過程)
什麼是procedure(存儲過程)?
- 存儲過程?當我聽到這個詞的時候,覺得它是mysql存儲數據的一個流程而不是一個名詞,可是當我網上了解時,才知道這個詞是翻譯過來的,原生詞爲Procedure,實際上它的含義就是至關於咱們面向對象裏的方法或者說是函數,在它裏面能夠完成多個sql語句的操做,而且能夠定義參數傳值等,與通常的單條sql語句的區別主要在這裏。
- 詳細瞭解: 點我
建立存儲過程
1 2 3 4 5 6 7
|
use test; delimiter // create procedure test_proce() begin insert into weuse(name,created_at,updated_at) values('hello',now(),now()); end// delimiter ;
|
enter image description herephp
-
上面的代碼說明:mysql
- use test; 這個誰都知道,使用某個數據庫,這裏要強調的是存儲過程必定是對於某個數據庫而言的,因此必需要選中一個數據庫才能建立成功。
- delimiter // 這個是將mysql中以;(分號)結尾的規定修改成以//(雙斜槓)爲語句結束符,由於存儲過程裏能夠有多條sql 語句,裏面的sql語句都以;號結尾,若是回車了那麼系統會當作sql語句直接執行了,咱們但願的是先定義這一系列sql語句而先不執行,因此要改下操做結束符。固然你在改後必定要改回來,你們能夠看到最後一行有對應的修改回來的語句。
-
下面的是一塊兒輸入的,能夠知道分別是建立存儲過程test_proce(),名稱能夠隨便起的,而後是在begin –end之間是定義一系列sql語句的就能夠了,記住最後end結尾要以以前修改後的結尾符結束。git
1 2 3 4
|
create procedure test_proce() begin insert into weuse(name,created_at,updated_at) values('hello',now(),now()); end//
|
三、建立定時任務
上面建立存儲過程其實是爲定時任務作鋪墊的,由於上面只說明瞭怎麼建立存儲過程,可是未說明怎麼調用,那這裏就用到了調用存儲過程了。github
建立定時任務event(事件)
1 2 3 4
|
create event second_event on schedule every 1 second on completion preserve disable do call test_proce();
|
enter image description heresql
- 代碼說明:
- 上面爲總體代碼,敲完再寫分號
- 第一行create event day_event是建立名爲second_event的事件,注意此處沒有括號
- 第二行是建立週期定時的規則,本處的意思是每秒鐘執行一次
- 第三行on completion preserve disable是表示建立後並不開始生效。
- 第四行do call test_proce()是該event(事件)的操做內容,表示調用咱們剛剛建立的test_proce()存儲過程。
查看定時任務event(事件),能夠查看本機全部的事件
1
|
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;
|
enter image description here數據庫
四、開啓已經建立好的event(事件)
1 2
|
alter event second_event on completion preserve enable;//開啓定時任務 alter event second_event on completion preserve disable;//關閉定時任務
|
- 當咱們用第一句命令開啓定時任務時,能夠就能夠查看數據庫狀況,已經實現了每秒鐘執行一次了,如圖。
enter image description herewindows
- 要想關閉定時任務只要執行上面的第二句命令,關閉須要關閉的定時任務就能夠了。
五、常見週期定時規則
-
週期執行–關鍵字 EVERY安全
- 單位有:second,minute,hour,day,week(周),quarter(季度),month,year
-
如:服務器
1 2 3
|
on schedule every 1 second //每秒執行1次 on schedule every 2 minute //每兩分鐘執行1次 on schedule every 3 day //每3天執行1次
|
-
在具體某個時間執行–關鍵字 AT框架
-
如:
1 2 3
|
on schedule at current_timestamp()+interval 5 day //5天后執行 on schedule at current_timestamp()+interval 10 minute //10分鐘後執行 on schedule at '2016-10-01 21:50:00' //在2016年10月1日,晚上9點50執行
|
-
在某個時間段執行–關鍵字STARTS ENDS
-
如:
1 2
|
on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后開始天天都執行執行到下個月底 on schedule every 1 day ends current_timestamp()+interval 5 day //從如今起天天執行,執行5天
|
六、效率工具
MysqlWorkBench
是官方推薦的免費可視化mysql操做工具,方便建模,ER圖操做,經我發現好像只能可視化操做存儲過程(也多是本身沒找到)
enter image description here
1 2
|
SELECT * FROM information_schema.EVENTS;//查看全部事件屬性 SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;//查看主要幾個屬性
|
enter image description here
Navicat
這個是收費的軟件,可是可視化操做比較輕量級,功能也不少,它能夠可視化操做存儲過程和Event事件,詳細操做你們能夠本身摸索啊!!
來源於:http://jiyiren.github.io/2016/03/27/Mysql_schedule/