事件(event)
是MySQL在相應的時刻調用的過程式數據庫對象,它由一個特定的線程來管理的,它有兩種調度方式。
- 一次性調用。
- 周期性調用。
最近在使用周期性調用時,發現無法生效;我們歸納為兩種問題:
- 全局的
event狀態默認
是關閉的; - 新建事件的狀態為DISABLE;
解決方案
問題1:將全局event狀態修改為:開啟
進入MySQL命令行模式 查看event是否開啟:show variables like 'event_scheduler'; 這時你會發現 event_scheduler 的值是 OFF
mysql> show variables like 'event_scheduler'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | OFF | +-----------------+-------+
- 臨時開啟
event
事件:set global event_scheduler=1;
執行完以上命令,再次查看event狀態,可以看到event_scheduler的值變成ON,此時event的狀態為“開啟”;
注意:此方法只是臨時開啟event狀態,當MySQL重新啟動時,event狀態會改變回原來的“OFF”,即“關閉狀態”;
- 永久開啟
event
事件:修改MySQL配置文件
windows
系統的 MySQL的配置文件名是 my.ini
;Linux
系統的 MySQL 的配置文件名是 my.cnf
;
打開配置文件在 [mysqld]
模塊下添加 event_scheduler=on
或 event_scheduler=1
;
重新啟動MySQL
問題2:新建事件的狀態為改為ENABLE;
修改完之后,event事件生效了。
經過多次測試”周期性調用“事件:發現每1秒、每一分鍾執行一次都成功,當測試每天執行一次時,發現並沒有生效。
后來發現,我測試”每天執行一次時“是修改系統時間去測試的,問題就出現在這里。
event事件並不是每時每刻都在掃描,而是采用休息休眠。 休眠一段時間后,等待下一次執行,再重新獲取新的系統時間,再重新計算。
總結來說,Mysql記錄的是啟動時間和時間間隔,通過系統時間,三個數值來計算下一個休眠時間,所以在休眠期間內改變系統時間,對休眠時間是無效的。
也就是說,休眠期間,它並沒實現監聽系統的時間