Latest Post

Tăng thứ hạng và truy cập tự nhiên với 10 phương pháp SEO hay nhất Kiếm Tiền Online (mmo): Khái Niệm và Các Hình Thức Phổ Biến

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.

Trả lời

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 *