MySQL 定時 Job 是指在特定時間或者特定的時間間隔里執行某些任務。配置好定時 Job 后,任務將會在預設的時間點自動執行。MySQL 中使用定時任務可以完成很多工作,比如數據備份、數據歸檔等等。
MySQL 定時任務的實現需要用到以下兩個關鍵組件:event_scheduler 和事件。
首先,我們需要在 MySQL 中啟用事件調度器,即設置event_scheduler = ON
。
mysql>SET GLOBAL event_scheduler = ON; Query OK, 0 rows affected (0.01 sec)
啟用事件調度器后,我們可以使用CREATE EVENT
語句來創建一個事件。
mysql>CREATE EVENT myevent ->ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR ->DO ->INSERT INTO mytable (message) VALUES ('定時任務已執行'); Query OK, 0 rows affected (0.00 sec)
以上的代碼創建了一個名為 “myevent” 的事件,并將任務設置在當前時間點之后的一個小時。事件具體的操作是向指定的數據表 “mytable” 中插入一條記錄。
如果我們想要修改事件的執行時間,可以使用ALTER EVENT
語句。
mysql>ALTER EVENT myevent ->ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 2 HOUR; Query OK, 0 rows affected (0.00 sec)
如果想要查看事件的詳細信息,可以使用SHOW CREATE EVENT
語句。
mysql>SHOW CREATE EVENT myevent; +--------+----------+-----------+------------------+----------------------+----------------------+----------------+----------------+-------------------------+------+----------------------+----------------------+--------------------+ | Event | sql_mode | time_zone | Create Event | character_set_client | collation_connection | Database Collation | | Comment | Starts | Ends | +--------+----------+-----------+------------------+----------------------+----------------------+----------------+----------------+-------------------------+------+----------------------+----------------------+--------------------+ | myevent | | SYSTEM | CREATE EVENT `myevent` ON SCHEDULE AT '2022-05-17 14:02 .... | +--------+----------+-----------+------------------+----------------------+----------------------+----------------+----------------+-------------------------+------+----------------------+----------------------+--------------------+ 1 row in set (0.00 sec)
在定時任務的管理中,我們需要注意任務的存儲過程的執行時間。因為 MySQL 是單線程工作的,如果一個任務執行的時間過長,可能會影響其他的任務。因此,在設計定時任務時,應該注意任務的時間性和耗時性。