MySQL 이벤트 스케줄러

MySQLBeginner
지금 연습하기

소개

이 랩에서는 MySQL 이벤트 스케줄러를 사용하여 데이터베이스 작업을 자동화하는 방법을 배우게 됩니다. 이벤트 스케줄러는 예약된 시간 또는 간격에 SQL 문을 실행하는 MySQL 의 기능입니다. 이는 데이터베이스 유지 관리, 데이터 정리 또는 주기적인 보고와 같은 일상적인 작업을 자동화하는 데 유용합니다.

이 랩에서는 이벤트 스케줄러 활성화, 데이터베이스 및 테이블 생성, 데이터 수정을 위한 반복 이벤트 예약, 이벤트 실행 확인, 마지막으로 이벤트 제거에 대한 안내를 받게 됩니다. 이 랩이 끝나면 MySQL 이벤트 스케줄러 사용의 기본 사항을 이해하게 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 100%입니다.학습자들로부터 93%의 긍정적인 리뷰율을 받았습니다.

이벤트 스케줄러 활성화

MySQL 이벤트 스케줄러는 예약된 이벤트를 실행하는 백그라운드 스레드로 실행됩니다. 기본적으로 이 기능은 비활성화되어 있습니다. 첫 번째 단계는 이를 활성화하는 것입니다.

먼저 데스크톱에서 터미널을 엽니다.

root 사용자로 MySQL 서버에 연결합니다. 이 랩 환경에서는 비밀번호 없이 연결하기 위해 sudo를 사용할 수 있습니다.

sudo mysql -u root

연결되면 MySQL 프롬프트 (mysql>) 가 표시됩니다.

다음 명령으로 이벤트 스케줄러의 현재 상태를 확인합니다.

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

출력에서 event_scheduler가 기본적으로 OFF로 표시됩니다.

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| event_scheduler  | OFF   |
+------------------+-------+
1 row in set (0.00 sec)

이벤트 스케줄러를 활성화하려면 다음 명령을 실행합니다. 이 설정은 전역적이며 서버가 실행되는 동안 유지됩니다.

SET GLOBAL event_scheduler = ON;

상태를 다시 확인하여 변경이 성공했는지 확인합니다.

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

출력은 이제 값이 ON으로 표시되어 이벤트 스케줄러가 활성화되었음을 확인해야 합니다.

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| event_scheduler  | ON    |
+------------------+-------+
1 row in set (0.00 sec)

이제 이벤트 스케줄러가 활성화되었으므로 다음 단계로 진행할 수 있습니다.

데이터베이스 및 테이블 생성

예약된 이벤트를 생성하기 전에 이벤트가 상호 작용할 데이터베이스와 테이블이 필요합니다. 이 단계에서는 test_db라는 데이터베이스와 event_logs라는 테이블을 생성합니다.

아직 MySQL 쉘에 있는 동안 test_db 데이터베이스를 생성합니다. IF NOT EXISTS 절은 데이터베이스가 이미 존재하는 경우 오류를 방지합니다.

CREATE DATABASE IF NOT EXISTS test_db;

새로 생성된 데이터베이스로 전환하여 후속 명령의 현재 데이터베이스로 설정합니다.

USE test_db;

Database changed라는 확인 메시지가 표시됩니다.

다음으로 event_logs 테이블을 생성합니다. 이 테이블에는 자동 증가하는 id와 이벤트가 업데이트할 counter 열이 있습니다.

CREATE TABLE event_logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    counter INT NOT NULL
);

마지막으로 event_logs 테이블에 시작 값 0으로 초기 행을 삽입합니다. 이렇게 하면 이벤트가 업데이트할 레코드가 생성됩니다.

INSERT INTO event_logs (id, counter) VALUES (1, 0);

다음 명령을 실행하여 테이블이 생성되고 데이터가 올바르게 삽입되었는지 확인할 수 있습니다.

SHOW TABLES;
SELECT * FROM event_logs;

출력에서 event_logs 테이블과 id = 1, counter = 0인 단일 행이 표시되어야 합니다.

+-----------------+
| Tables_in_test_db |
+-----------------+
| event_logs      |
+-----------------+
1 row in set (0.00 sec)

+----+---------+
| id | counter |
+----+---------+
|  1 |       0 |
+----+---------+
1 row in set (0.00 sec)

데이터베이스와 테이블이 준비되었으므로 이제 예약된 이벤트를 생성할 수 있습니다.

반복 이벤트 생성

이제 주기적으로 실행되는 이벤트를 생성합니다. 이 이벤트는 10 초마다 event_logs 테이블의 counter 값을 증가시킵니다.

아직 test_db 데이터베이스를 사용하고 있는지 확인합니다.

USE test_db;

update_counter_event라는 이벤트를 생성합니다.

CREATE EVENT update_counter_event
ON SCHEDULE EVERY 10 SECOND
DO
  UPDATE event_logs SET counter = counter + 1 WHERE id = 1;

이 구문을 자세히 살펴보겠습니다.

  • CREATE EVENT update_counter_event: update_counter_event라는 이름으로 새 이벤트를 정의합니다.
  • ON SCHEDULE EVERY 10 SECOND: 이벤트가 10 초마다 실행되도록 지정합니다.
  • DO UPDATE ...: 이벤트가 실행할 SQL 문입니다. id1인 행의 counter를 증가시킵니다.

이벤트가 성공적으로 생성되었는지 확인하려면 SHOW EVENTS 명령을 사용합니다.

SHOW EVENTS;

출력에는 새 이벤트와 해당 세부 정보가 나열됩니다. StatusENABLED인지 확인합니다.

+---------+----------------------+---------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| Db      | Name                 | Definer       | Time zone | Type      | Execute at | Interval value | Interval field | Starts              | Ends | Status  | Originator | character_set_client | collation_connection | Database Collation |
+---------+----------------------+---------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| test_db | update_counter_event | root@localhost| SYSTEM    | RECURRING | NULL       | 10             | SECOND         | 2024-05-27 12:00:00 | NULL | ENABLED |          1 | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
+---------+----------------------+---------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

참고: DefinerStarts 시간은 다를 수 있습니다.

이벤트가 이제 활성화되었으며 실행되도록 예약되었습니다. 다음 단계에서는 예상대로 데이터를 업데이트하고 있는지 확인할 것입니다.

이벤트 실행 확인

이벤트가 예약되었으므로 올바르게 실행되는지 확인해야 합니다. 이벤트는 10 초마다 실행되므로 시간이 지남에 따라 counter 값이 증가하는 것을 볼 수 있습니다.

현재 값을 보려면 event_logs 테이블을 쿼리합니다.

SELECT * FROM event_logs WHERE id = 1;

이제 counter2이거나 작은 숫자일 수 있습니다.

+----+---------+
| id | counter |
+----+---------+
|  1 |       2 |
+----+---------+
1 row in set (0.00 sec)

이벤트가 최소 한 번 실행되도록 약 15-20 초 동안 기다립니다. 그런 다음 SELECT 쿼리를 다시 실행합니다.

SELECT * FROM event_logs WHERE id = 1;

counter 값이 증가했음을 알 수 있습니다.

+----+---------+
| id | counter |
+----+---------+
|  1 |       3 |
+----+---------+
1 row in set (0.00 sec)

더 오래 기다렸다가 쿼리를 다시 실행하면 값이 계속 증가하여 update_counter_event가 예약에 따라 성공적으로 실행되고 있음을 확인할 수 있습니다. 이는 MySQL 에서 자동화된 시간 기반 작업의 강력함을 보여줍니다.

이벤트 삭제

예약된 이벤트가 더 이상 필요하지 않을 때는 불필요한 리소스 소비를 방지하기 위해 제거하는 것이 좋습니다. 마지막 단계에서는 update_counter_event를 삭제합니다.

이벤트를 삭제하려면 DROP EVENT 문을 사용합니다. 이벤트가 이미 제거된 경우 오류를 방지하기 위해 IF EXISTS 절을 사용하는 것이 좋습니다.

DROP EVENT IF EXISTS update_counter_event;

이벤트가 삭제되었는지 확인하려면 SHOW EVENTS 명령을 다시 실행합니다.

SHOW EVENTS;

이제 출력은 빈 세트여야 하며, 이는 test_db 데이터베이스에 더 이상 예약된 이벤트가 없음을 확인합니다.

Empty set (0.00 sec)

update_counter_event는 더 이상 실행되지 않습니다. 기다렸다가 event_logs 테이블을 다시 쿼리하여 이를 확인할 수 있습니다. counter 값은 더 이상 증가하지 않을 것입니다.

MySQL 이벤트의 수명 주기를 성공적으로 관리했습니다. 이제 MySQL 셸을 종료할 수 있습니다.

exit;

요약

이 실습에서는 MySQL 이벤트 스케줄러를 사용하여 작업을 자동화하는 기본 사항을 배웠습니다. 스케줄러를 성공적으로 활성화하고, 데이터베이스와 테이블을 설정했으며, 데이터를 자동으로 업데이트하는 반복 이벤트를 생성했습니다. 또한 이벤트 상태 및 실행을 확인하는 연습을 하고, 더 이상 필요하지 않을 때 이벤트를 제거하는 방법을 배웠습니다.

이러한 기술은 광범위한 데이터베이스 관리 및 유지보수 작업을 자동화하는 데 유용하며, 데이터 무결성을 보장하고 수동 작업을 줄이는 데 도움이 됩니다.