Chúng ta thường quen thuộc với việc sử dụng Cron Job trên hệ điều hành Linux hoặc Task Scheduler trên hệ điều hành Windows để lên lịch các nhiệm vụ. Tuy nhiên, trong hệ quản trị CSDL MySQL/MariaDB, cũng có một tính năng tương tự được gọi là Event Scheduler. Chức năng chạy nền này cho phép chúng ta thực hiện các nhiệm vụ dựa trên lịch trình đã được định sẵn. Bài viết này sẽ cung cấp chi tiết về Event Scheduler cho blog.
Event Scheduler là gì?
Event Scheduler, hay Trình lên lịch sự kiện, là một chức năng tích hợp trong cơ sở dữ liệu MySQL/MariaDB, giúp bạn tự động lên lịch và thực hiện các nhiệm vụ vào một thời điểm cụ thể hoặc trong một khoảng thời gian nhất định. Để tận dụng chức năng này, bạn có thể sử dụng các câu lệnh SQL để tạo, chỉnh sửa và xóa các sự kiện.
Bật tính năng Event Scheduler
Kiểm tra tính năng Event Scheduler có đang hoạt động hay không bằng câu lệnh SQL sau:
SHOW VARIABLES WHERE VARIABLE_NAME = 'event_scheduler'
Nếu kết quả là “OFF” tức là nó đang không hoạt động. Mặc định MariaDB / MySQL sẽ không bật sẵn tính năng này.
Để kích hoạt nó lên tạm thời chúng ta sử dụng câu lệnh sau:
SET GLOBAL event_scheduler = ON;
Còn muốn được thiết lập vĩnh viễn, cả lúc khởi động thì chúng ta cần sửa file my.conf của phần mềm
Thêm “event_scheduler = ON” vào sau [mysqld] rồi khởi động lại MariaDB và MySQL
Trường hợp thiết lập config rồi mà vẫn gặp lỗi: 1577 – Cannot proceed, because event scheduler is disabled
Thì hãy chạy command mysql_upgrade trước
Tạo 1 Event Scheduler
Event Scheduler trong MySQL cho phép bạn lên lịch và tự động hóa các tác vụ xử lý cơ sở dữ liệu. Đây là một tính năng quan trọng trong MySQL cho phép bạn thực hiện các sự kiện được lên lịch mà không cần phải can thiệp thủ công.
MySQL Event Scheduler là một thành phần quản lý sự kiện nền (background) được tích hợp sẵn trong hệ thống quản lý cơ sở dữ liệu MySQL. Chức năng chính của Event Scheduler là quản lý và thực hiện các sự kiện (events) đã được lên lịch tại các thời điểm cụ thể. Điều này giúp tự động hóa các tác vụ, thực hiện chúng đúng thời gian và giảm tải công việc quản lý tác vụ từ phía người dùng.
Để tạo một sự kiện mới, bạn sử dụng câu lệnh CREATE EVENT
Cú pháp lệnh:
CREATE EVENT [IF NOT EXIST] event_name ON SCHEDULE schedule DO event_body
VD: Mình có 1 chức năng là hiển thị danh sách bài viết nhiều người người xem nhất trong tuần. Vì vậy trong bảng CSDL mình chỉ lưu các view record mà người xem trong 7 ngày gần nhất. Vì vậy mình lập 1 lịch hàng ngày xóa các record cũ hơn 7 ngày đi.
Tạo bảng CSDL
CREATE TABLE `wp_postviews_on_week` ( `postid` bigint(20) NOT NULL, `day` datetime NOT NULL, `pageviews` bigint(20) DEFAULT '1', `last_viewed` datetime NOT NULL, PRIMARY KEY (`postid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Tạo lịch chạy
CREATE EVENT IF NOT EXISTS delete_old_views ON SCHEDULE EVERY 1 DAY STARTS str_to_date( date_format(now(), '%Y%m%d 1200'), '%Y%m%d %H%i' ) ON COMPLETION PRESERVE ENABLE DO DELETE FROM `wp_postviews_on_week` WHERE `day` < DATE_SUB(CURDATE(), INTERVAL 7 DAY);
Kết quả: Chúng ta có lịch như bên dưới.