Để event_scheduler luôn ON ngay cả sau khi restart MySQL, bạn phải cấu hình trong file cấu hình (my.cnf hoặc my.ini), không chỉ dùng SET GLOBAL (chỉ tạm thời).
Cách 1: Cấu hình file my.cnf / my.ini (Khuyên dùng, vĩnh viễn)
Linux/Mac: /etc/my.cnf hoặc /etc/mysql/my.cnf
[mysqld]
event_scheduler = ON
Windows: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
[mysqld]
event_scheduler = ON
Sau khi sửa: Restart MySQL
# Linux systemd
sudo systemctl restart mysqld
# Windows Services
net stop mysql80 && net start mysql80
Cách 2: SET GLOBAL (Chỉ tạm thời, mất khi restart)
SET GLOBAL event_scheduler = ON;
-- Hoặc
SET @@global.event_scheduler = ON;
Kiểm tra trạng thái
-- Xem biến toàn cục
SELECT @@global.event_scheduler;
-- Hoặc
SHOW VARIABLES LIKE 'event_scheduler';
Kết quả mong đợi: ON
Ví dụ minh họa từ tài liệu gốc
mysql> SELECT @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| ON |
+-------------------+
mysql> RESTART; -- Giả lập restart
-- Mất kết nối tạm thời...
mysql> SELECT @@event_scheduler;
+-------------------+
| @@event_scheduler |
+-------------------+
| ON | -- Vẫn ON nếu đã config my.cnf
+-------------------+
Tạo Event ví dụ (chạy định kỳ)
-- Chỉ chạy được khi event_scheduler = ON
CREATE EVENT daily_cleanup
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
DELETE FROM logs WHERE created_at < DATE_SUB(NOW(), INTERVAL 30 DAY);
Kiểm tra Event đang chạy
SHOW EVENTS;
-- Hoặc
SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = 'ten_db';
Lưu ý quan trọng
event_schedulerlà biến **GLOBAL**, không phải SESSION- Mặc định MySQL:
OFF(tắt) - Một số shared hosting không cho sửa my.cnf → Hỏi support hoặc dùng cron job bên ngoài
- Event không chạy nếu scheduler OFF, cũng không báo lỗi
- Khi bật, các event
ENABLEDsẽ chạy theo lịch trình
Troubleshooting
| Vấn đề | Nguyên nhân | Giải pháp |
|---|---|---|
| Event không chạy | event_scheduler = OFF | Bật trong my.cnf + restart |
| Event chạy nhưng lỗi | SQL error trong DO clause | Kiểm tra error log, test SQL thủ công |
| Event bị DISABLE | ALTER EVENT ... DISABLE | ALTER EVENT ten_event ENABLE |
| Timezone sai | Server timezone vs session | SET time_zone = '+07:00' trong event |