MYSQL EVENT事件無法生效


事件(event)是MySQL在相應的時刻調用的過程式數據庫對象,它由一個特定的線程來管理的,它有兩種調度方式。

  1. 一次性調用。
  2. 周期性調用。

最近在使用周期性調用時,發現無法生效;我們歸納為兩種問題:

  1. 全局的event狀態默認是關閉的;
  2. 新建事件的狀態為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.iniLinux系統的 MySQL 的配置文件名是 my.cnf

打開配置文件在 [mysqld] 模塊下添加 event_scheduler=onevent_scheduler=1

重新啟動MySQL

 問題2:新建事件的狀態為改為ENABLE;

 修改完之后,event事件生效了。

經過多次測試”周期性調用“事件:發現每1秒、每一分鍾執行一次都成功,當測試每天執行一次時,發現並沒有生效。

后來發現,我測試”每天執行一次時“是修改系統時間去測試的,問題就出現在這里。

event事件並不是每時每刻都在掃描,而是采用休息休眠。 休眠一段時間后,等待下一次執行,再重新獲取新的系統時間,再重新計算。 

總結來說,Mysql記錄的是啟動時間和時間間隔,通過系統時間,三個數值來計算下一個休眠時間,所以在休眠期間內改變系統時間,對休眠時間是無效的。 

也就是說,休眠期間,它並沒實現監聽系統的時間 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM