Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ตั้งค่า event_scheduler=ON ถาวรใน MySQL (ยังคงอยู่หลัง Restart)

การเปิด 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)

สิทธิ์ที่จำเป็น

  • EVENT privilege สำหรับ CREATE/DROP/ALTER EVENT
  • SUPER privilege สำหรับ SET GLOBAL event_scheduler