因爲項目須要,每月的歷史存量數據須要進行一個歸檔和備份操做,以及一些日誌表須要進行一個明細字段清除,讓mysql數據庫磁盤節省空間。則須要一些定時任務來定時清理這些數據。html
show variables like '%event_scheduler%';
若是顯示的爲Off
選項,有提供以下兩種方式對其進行修改mysql
1. 語句方式(當前啓動的實例有效,重啓後無效)linux
set global event_scheduler=1;
2. 配置my.cnf(windows下是my.ini)下添加以下選項sql
[mysqld] event_scheduler=ON
而後將其保存後重啓mysql便可數據庫
存儲過程:存儲過程,又稱存儲程序(英語:Stored Procedure),是在數據庫存儲複雜程序,以便外部程序調用的數據庫對象,能夠視爲數據庫的一種函數或子程序。windows
具體學習地址:點我安全
create PROCEDURE sched_clean() --命名 BEGIN -- 定義參數 DECLARE begin_time BIGINT DEFAULT UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE(),interval 31 DAY))*1000; DECLARE end_time BIGINT DEFAULT UNIX_TIMESTAMP(DATE_SUB(CURRENT_DATE(),interval 30 DAY))*1000; -- 更新數據 UPDATE test_table SET rule_cost=null WHERE start_time>begin_time and start_time<end_time; END
當建立好了存儲過程後,咱們就能夠定時調用該存儲過程了函數
CREATE EVENT `demo`.`day_of_clean_event` ON SCHEDULE EVERY '1' DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR) ON completion preserve disable DO call sched_clean();
代碼說明:學習
CREATE EVENT demo.day_of_clean_event
在demo數據庫中建立一個名爲day_of_clean_event事件SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;
alter event event_name on completion preserve enable;//開啓定時任務 alter event event_name on completion preserve disable;//關閉定時任務
information_schema.EVENTS
表中仍是查詢不到記錄① 週期執行 – 關鍵字 EVERYnuxt
單位有: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天