日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL 中的定时任务

發布時間:2023/12/18 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 中的定时任务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:jiyiren 的《MySQL 中的定時任務》

原址:http://jiyiren.github.io/2016/03/27/Mysql_schedule/

?

?

MySQL 中的定時任務

發表于 2016-03-27 | 分類于 MySQL | 評論數: 4 | 閱讀次數: 3644

MySQL 5 開啟定時任務

最近項目里面的后臺需要用到定時任務,而 MySQL 從 5.0 開始自帶了定時事件操作,所以學習下并做下記錄。

后臺周期定時任務可以有多種解決方案,我所知道的大概有以下幾種:

(1). 后臺框架自帶定時任務。比如 Php 中的 Laravel 框架里有提供定時任務操作接口,其他的框架大家可以單獨針對了解。

(2). 服務器操作系統層面的定時。通常我們的服務器主要基于兩大平臺,一個 Windows Server, 它的定時任務系統有提供的。Linux 下也有,通常流行的是 crontab 工具實現的 ( 想了解這里有個 視頻教程 ), 但是 crontab 的定時任務通常定時操作腳本這樣的文件,而直接定時操作數據庫的就比較麻煩了。但是也有解決辦法,就是在服務器端寫一個 get 請求 url,在后臺里完成要定時完成的數據庫操作,這樣我們只要實現定時訪問該接口就行了,Linux 下的 curl 命令可以很方便發出 get 請求,我們只要寫個包含訪問該接口的腳本,再結合 crontab 就可以完成后臺數據的定時更新操作了。

(3). 但是畢竟寫個接口安全性不是太高,而大家用的如果是 MySQL 數據庫,那就正好可以利用其自帶的定時操作了,下面簡單介紹 MySQL 定時操作的使用。

MySQL 配置

查看定時策略是否開啟,查看命令:

show variables like '%event_sche%';

顯示的 event_scheduler 為 OFF 時用以下命令開啟:

set global event_scheduler=1;

以上的改法在數據庫重啟后將會恢復為原來狀態,要想數據庫重啟后也可以讓 event_scheduler 開啟,則需要在配置文件 my.ini 的設置。修改如下,然后重啟 MySQL 服務即可:

[mysqld]

event_scheduler=ON // 這一行加入 mysqld 標簽下

創建 procedure ( 存儲過程 )


什么是 procedure ( 存儲過程 ) ?

存儲過程?當我聽到這個詞的時候,以為它是 MySQL 存儲數據的一個流程而不是一個名詞,但是當我網上了解時,才知道這個詞是翻譯過來的,原生詞為 Procedure, 實際上它的含義就是相當于我們面向對象里的方法或者說是 函數,在它里面可以完成多個 sql 語句的操作,并且可以定義參數傳值等,與一般的單條 sql 語句的區別主要在這里,詳細了解 點我。

創建存儲過程

先上一段創建存儲過程代碼:

use test;

delimiter //

create procedure test_proce()

begin

insert into weuse(name,created_at,updated_at) values('hello',now(),now());

end//

delimiter ;

上面的代碼說明:

(1). use test; : 這個誰都知道,使用某個數據庫,這里要強調的是存儲過程一定是對于某個數據庫而言的,所以必須要選中一個數據庫才能創建成功。

(2). delimiter // : 這個是將 MySQL 中以 ;(分號) 結尾的規定修改為以 //(雙斜杠) 為語句結束符,因為存儲過程里可以有多條 sql 語句,里面的 sql 語句都以 ; 號結尾,如果回車了那么系統會當做 sql 語句直接執行了,我們希望的是先定義這一系列 sql 語句而先不執行,所以要改下操作結束符。當然你在改后一定要改回來,大家可以看到最后一行有對應的修改回來的語句。

(3). 下面所示的語句則是一起輸入的,可以知道分別是創建存儲過程 test_proce(), 名稱可以隨便起的,然后是在 begin --end 之間是定義一系列 sql 語句的就可以了,記住最后 end 結尾要以之前修改后的結尾符 // 結束。

create procedure test_proce()

begin

insert into weuse(name,created_at,updated_at) values('hello',now(),now());

end//

創建定時任務


上面創建存儲過程實際上是為 定時任務 做鋪墊的,因為上面只說明了怎么創建存儲過程,但是未說明怎么調用,那這里就用到了調用存儲過程了。

創建定時任務 event ( 事件 )

依舊先上創建定時任務事件代碼:

create event second_event

on schedule every 1 second

on completion preserve disable

do call test_proce();

代碼說明:

  • 上面為整體代碼,敲完再寫分號;
  • 第一行 create event day_event 是創建名為 second_event 的事件,注意此處沒有括號;
  • 第二行是創建周期定時的規則,本處的意思是每秒鐘執行一次;
  • 第三行 on completion preserve disable 是表示創建后并不開始生效;
  • 第四行 do call test_proce() 是該 event(事件) 的操作內容,表示調用我們剛剛創建的 test_proce() 存儲過程。
  • 查看定時任務 event ( 事件 )

    查看本機所有的事件:

    SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;

    開啟已經創建好的 event ( 事件 )

    alter event second_event on completion preserve enable;//開啟定時任務

    alter event second_event on completion preserve disable;//關閉定時任務

    當我們用第一句命令開啟定時任務時,可以就可以查看數據庫情況,已經實現了 每秒鐘執行一次 了,如圖:

    要想關閉定時任務只要執行上面的第二句命令,關閉需要關閉的定時任務就可以了。

    常見周期定時規則

    ① 周期執行 – 關鍵字 EVERY

    單位有:second, minute, hour, day, week(周), quarter(季度), month, year,如:

    on schedule every 1 second //每秒執行1次

    on schedule every 2 minute //每兩分鐘執行1次

    on schedule every 3 day //每3天執行1次

    ② 在具體某個時間執行 – 關鍵字 AT, 如:

    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, 如:

    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 圖操作,經我發現好像只能可視化操作存儲過程,沒看到有定時任務的 ( 也可能是自己沒找到 )。

    存儲過程示例如下:

    對于 Event 事件,可以查看,用 sql 命令

    SELECT * FROM information_schema.EVENTS; // 查看所有事件屬性

    SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS; // 查看主要幾個屬性

    Navicat

    這個是收費的軟件,但是可視化操作比較輕量級,功能也很多,它可以可視化操作存儲過程和Event 事件,詳細操作大家可以自己摸索啊!!

    • 本文作者: jiyiren
    • 本文鏈接: http://yoursite.com/2016/03/27/Mysql_schedule/
    • 版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY-NC-SA 4.0 許可協議。轉載請注明出處!

    總結

    以上是生活随笔為你收集整理的MySQL 中的定时任务的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。