定時器主要用於定時的執行一次或者迴圈執行一條sql,在實際場景上,例如,定期清理資料表,定期匯出日誌檔案等等場景。本次公司晚上維護系統,晚上需要定期掛維護頁,用到了定時器,這裡簡單總結一下。
mysql event 功能預設是關閉的,可以使用下面的語句來看 event 的狀態,如果是 off 或者 0,表示是關閉的。
如果未開啟定時器,執行以下命令開啟定時器:
set global event_scheduler = 1;
set global event_scheduler = 0;
建立定時器 sql 模板:
delimiter $$
-- set global event_scheduler = on$$ -- required for event to execute but not create
create /*[definer = ]*/ event `dbname`.`eventname` -- 事件名
on schedule
/* uncomment the example below you want to use */
-- scheduleexample 1: run once 只執行一次
-- at 'yyyy-mm-dd hh:mm.ss'/current_timestamp
-- scheduleexample 2: run at intervals forever after creation 建立完後週期性執行
-- every 1 [hour|month|week|day|minute|...]
-- scheduleexample 3: specified start time, end time and interval for execution 指定開始和結束時間,並在期間內週期性的執行
/*every 1 [hour|month|week|day|minute|...]
starts current_timestamp/'yyyy-mm-dd hh:mm.ss'
ends current_timestamp/'yyyy-mm-dd hh:mm.ss' */
/*[on completion [not] preserve] -- 時間完成後是否刪除事件
[enable | disable] -- 是否立即生效
[comment 'comment']*/
do begin
(sql_statements) -- 需要週期性執行的 sql 語句
end$$
delimiter ;
delimiter $$
這個是將mysql中以 ; 結尾的規定修改為以 $$ 為語句結束符,因為儲存過程裡可以有多條 sql 語句,裡面的 sql 語句都以 ; 結尾,如果回車了那麼系統會當做 sql 語句直接執行了,我們希望的是先定義這一系列 sql 語句而先不執行,所以要改下操作結束符。當然你在改後一定要改回來,大家可以看到最後一行有對應的修改回來的語句。
如果需要週期性執行的語句也可用儲存過程來代替,使用do call procedure()
語句來代替。
設定定時器事件的生效與否語句:
1.從現在開始每隔九天定時執行alter event event_minute disable; # 關閉事件
alter event event_minute enable; # 啟用事件
on schedule every 9 day starts now() ;
2.每個月的一號凌晨 1 點執行
on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour);
3.每個季度一號的凌晨1點執行
on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour);
mysql 定時器概念 MySQL定時器
mysql定時器 建立測試表 create table t v varchar 100 not null engine innodb default charset utf8 建立定時器 呼叫的儲存過程 delimiter drop procedure if exists e test create...
mysql 定時器概念 Mysql 定時器
定時任務 週期任務 檢視命令 show variables like event sche 顯示的event scheduler為off時用以下命令開啟 set global event scheduler 1 注意 以上的改法在資料庫重啟後將會恢復為原來狀態,要想資料庫重啟後也可以讓event s...
mysql 定時器概念 MySQL 定時器
mysql定時器是系統給提供了event,而oracle裡面的定時器是系統給提供的job。廢話少說,下面建立表 create table mytable id int auto increment not null,name varchar 100 not null default introduc...