การเปิด Event Scheduler แบบถาวรใน MySQL
event_scheduler ควบคุมการทำงานของ Events (Scheduled Tasks) ใน MySQL ค่าเริ่มต้นคือ OFF ต้องเปิดให้ ON และตั้งค่าในไฟล์ config เพื่อคงค่าหลัง restart
วิธีที่ 1: ตั้งค่ารันไทม์ (หายหลัง Restart)
SET GLOBAL event_scheduler = ON;
-- หรือ
SET @@global.event_scheduler = ON;
วิธีที่ 2: ตั้งค่าในไฟล์ Config (ถาวร - แนะนำ)
แก้ไข my.cnf (Linux/Mac) หรือ my.ini (Windows):
[mysqld]
event_scheduler = ON
จากนั้น Restart MySQL service:
# Linux (systemd)
sudo systemctl restart mysqld
# Windows (Admin PowerShell)
Restart-Service MySQL80
การตรวจสอบสถานะ
SHOW VARIABLES LIKE 'event_scheduler';
-- หรือ
SELECT @@event_scheduler;
ผลลัพธ์ควรเป็น ON
ตัวอย่างจากบทความ (Restart Test)
mysql> SELECT @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| ON |
+-------------------+
mysql> RESTART; -- MySQL 8.0+ command
-- (connection lost temporarily)
mysql> SELECT @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| ON |
+-------------------+
การสร้าง Event ทดสอบ
CREATE EVENT test_event
ON SCHEDULE EVERY 1 MINUTE
DO
INSERT INTO event_log (executed_at) VALUES (NOW());
ตรวจสอบ Events
SHOW EVENTS;
SELECT * FROM information_schema.EVENTS;
⚠️ ข้อควรระวัง
event_scheduler = ONต้องอยู่ใน section[mysqld]ไม่ใช่ [client] หรือ [mysql]- บาง Distro ใช้
/etc/mysql/mysql.conf.d/mysqld.cnfแทน/etc/my.cnf - ตรวจสอบ error log หาก event ไม่รัน:
tail -f /var/log/mysql/error.log - Event ใช้ timezone ของ server (
SET time_zoneหรือ system timezone)
สิทธิ์ที่จำเป็น
EVENTprivilege สำหรับ CREATE/DROP/ALTER EVENTSUPERprivilege สำหรับ SET GLOBAL event_scheduler