11/08/2018, 19:30

MySQL Scheduled Event

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về MySQL event scheduler và làm thế nào để tạo ra MySQL events để tự động hóa các tác vụ cơ sở dữ liệu. MySQL event là sự kiện được thực thi dựa theo một lịch trình được định sẵn. Khi bạn tạo ra một sự kiện, bạn đang tạo ra một đối tượng ...

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về MySQL event scheduler và làm thế nào để tạo ra MySQL events để tự động hóa các tác vụ cơ sở dữ liệu.

MySQL event là sự kiện được thực thi dựa theo một lịch trình được định sẵn. Khi bạn tạo ra một sự kiện, bạn đang tạo ra một đối tượng cơ sở dữ liệu được đặt tên có chứa một hoặc nhiều câu lệnh SQL được thực thi tại một hoặc nhiều chu kỳ (lặp đi lặp lại) , bắt đầu và kết thúc trong một ngày và trong thời gian cụ thể. Về mặt khái niệm, điều này cũng tương tự như crontab Unix hoặc Windows Task Scheduler.

Bạn có thể sử dụng MySQL event trong nhiều trường hợp chẳng hạn như tối ưu hóa cơ sở dữ liệu bảng, xóa logs, lưu trữ dữ liệu, hoặc tạo các báo cáo phức tạp trong thời gian off.

MySQL event scheduler configuration

Theo mặc định, MySQL event scheduler không được kích hoạt.

Screen Shot 2016-06-06 at 2.03.04 PM

Để kích hoạt bạn cần phải thực hiện lệnh sau đây:

Khi đã kích hoạt, Bây giờ để xem trạng thái. ta run lại show processlist;

Screen Shot 2016-06-06 at 2.03.38 PM

Để vô hiệu hóa và ngăn stop event scheduler, bạn thực hiện các lệnh SET GLOBAL với giá trị của event_scheduler = OFF:

Creating new MySQL events

Tạo một event tương tự để tạo các đối tượng cơ sở dữ liệu khác như stored procedures or triggers. Một sự kiện là một đối tượng có tên có chứa các câu lệnh SQL.

Stored procedure chỉ được thực thi khi nó được gọi, trigger chỉ thực khi có 1 sự kiện liên quan đến table như insert, update, delete. Event scheduler có thể được thực hiện tại một lần hay những khoảng thời gian theo 1 chu kỳ.

Để tạo và lập lịch một sự kiện mới, bạn sử dụng câu lệnh CREATE EVENT như sau:

Giải thích:

  • Đầu tiên bạn cần đặt 1 tên event sau mệnh đề CREATE EVENT. Tên event phải là duy nhất, k được trùng tên event đã có trong Database.
  • Thứ 2: bạn đặt lịch sau mệnh đề [ON SCHEDULE].
    • Nếu event này là 1 sự kiện thời gian, bạn sử dụng cú pháp

Nếu event là một sự kiện có định kỳ (lặp đi lặp lại), bạn sử dụng cú pháp:

  • Thứ ba, bạn đặt các câu lệnh SQL sau từ khóa DO. Chú ý quan trọng, bạn có thể gọi một stored procedure tại đây, Trong trường hợp có nhiều câu lệnh sql bạn có thể viết trong tags [BEGIN ….END]

Hãy xem xét vài ví dụ tạo các events để hiểu được cú pháp trên.

Step1, tạo một bảng messeage bằng cách sử dụng câu lệnh CREATE TABLE như sau:

Step2,Để lập lịch one-time event và chèn một messages vào một bảng bạn làm theo các bước sau :

step3, kiểm tra table messeages; bạn sẽ thấy 1 record đã đc tạo. Nó có nghĩa là event được thực hiện khi nó được tạo ra.

Screen Shot 2016-06-06 at 2.06.20 PM

Để hiển thị tất cả các events trong database, bạn sử dụng câu lệnh sau:

Screen Shot 2016-06-06 at 2.06.57 PM

Chúng ta không thấy bất kỳ kết quả vì một sự kiện được tự động OFF đi khi nó hết hạn. Trong trường hợp trên, đó là một sự kiện được thực thi 1 lần và đã hết hạn khi thực thi của nó hoàn thành.

Để thay đổi, bạn có thể sử dụng mệnh đề ON COMPLETION PRESERVE. Câu lệnh sau đây thực hiện sau thời gian 1 phút sau khi event đc tạo.

Chờ 1 phút, kiểm tra bảng table messeages, 1 record mới được thêm vào:

Screen Shot 2016-06-06 at 2.07.37 PM

Nếu chúng ta thực hiện câu lệnh SHOW EVENTS FROM demo_report; một lần nữa, ta sẽ thấy trạng thái kết quả vì sử dụng mệnh đề ON COMPLETION PRESERVE

Screen Shot 2016-06-06 at 2.08.03 PM

Câu lệnh sau đây tạo ra sự kiện định kỳ (lặp đi lặp lại) thực thi mỗi phút và hết hạn trong 1 giờ . tính từ khi event được thực thi:

Chú ý rằng tôi sử dụng STARTS và ENDS để xác định khoảng thời gian hết hạn cho sự kiện này. Bạn có thể test sự kiện lặp lại này bằng cách chờ đợi vài phút và kiểm tra table messeage.

Screen Shot 2016-06-06 at 2.08.39 PM

Result

Screen Shot 2016-06-06 at 2.09.02 PM

Drop MySQL events

Để loại bỏ một sự kiện hiện tại trong database, bạn sử dụng câu lệnh DROP EVENT như sau:

Ví dụ, để Xóa Event test_event_01, bạn sử dụng câu lệnh sau:

Trong hướng dẫn này, bạn đã học về MySQL events, làm thế nào để tạo và xóa các sự kiện từ cơ sở dữ liệu.

Techtalk via Viblo

0