Tạo và quản lý Event Scheduler trong MySQL / MariaDB


Chúng ta đã khá quen thuộc với Cron Job trên Linux hoặc Task Scheduler trên Windows. Ở hệ quản trị CSDL MySQL/MariaDB cũng có 1 tính năng như vậy gọi là Event Scheduler. Chức năng chạy nền này sẽ giúp chúng ta thực hiện các nhiệm vụ theo 1 lịch trình đã định sẵn. Bây giờ vinasupport.com sẽ có 1 bài viết chi tiết về Event Scheduler.

Event Scheduler là gì?

Event Scheduler – Trình lập lịch sự kiện là một tính năng có trong MySQL/MariaDB cho phép bạn lên lịch các tác vụ chạy tự động tại một thời điểm hoặc khoảng thời gian cụ thể. Bạn có thể sử dụng các câu lệnh SQL để tạo, thay đổi và xóa bỏ 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

Bạn có thể sử dụng Event Scheduler để lên lịch và tự động hóa các tác vụ xử lý cơ sở dữ liệu. MySQL Event Scheduler là một luồng chạy nền (background) và quản lý việc thực hiện các sự kiện đã được lên lịch.

Để 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.

Nguồn: vinasupport.com

 

             
SHARE

Bài viết liên quan

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web