MySQL Event Scheduler로 스케쥴러 만들기

Bluewave·2025년 1월 1일
post-thumbnail

🍯 개념

MySQL Event Scheduler란?

정해진 시간에 특정 작업을 자동으로 실행하도록 설정할 수 있는 기능
쉽게 말해 "알람" 역할!
서버나 OS 스케줄러를 따로 설정하지 않아도 MySQL 자체에서 주기적으로 또는 특정 시점에 실행되는 작업 설정 가능

사용하는 이유

  • 주기적 데이터 처리
  • 자동화: 관리 부담 낮춤
  • 효율성: 외부 프로그램 사용 X

주요 구성 요소

  • Event 이름(event_name): 스케줄러 구분 이름
  • 시간 스케줄(schedule): 작업을 실행할 시간과 주기 설정
    • AT: 특정 시점에 실행
    • EVERY: 일정 간격으로 반복 실행
    • STARTS, ENDS: 실행 기간을 설정
  • 실행할 작업(event_body): 실제로 실행할 SQL 쿼리문
  • 추가 옵션
    • EVABLE / DISABLE: 스케줄러 활성화 여부
    • ON COMPLETION: 완료 후 이벤트 유지 결정

Event Scheduler 활성화

MySQL Event Scheduler는 기본적으로 꺼져 있음

현재 상태 확인

SHOW VARIABLES LIKE 'event_scheduler';
ㄴ 결과가 OFF 이면 비활성화

활성화

SET GLOBAL event_scheduler = ON;

현재 생성된 이벤트 확인

SHOW EVENTS;
SELECT * FROM information_schema.EVENTS;

CREATE EVENT 문법

Event 생성 시 사용하는 문법

CREATE
    [DEFINER = user]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    DO event_body;

예시

1분마다 실행되는 이벤트

CREATE EVENT sample_event
ON SCHEDULE EVERY 1 MINUTE
DO
INSERT INTO sample_table (data) VALUES ('Hello, World!');

특정 시간에 한 번 실행되는 이벤트

CREATE EVENT delete_old_data
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
DO
DELETE FROM sample_table WHERE created_at < NOW() - INTERVAL 1 DAY;

주요 특징

  • Event는 MySQL 서버에 의존하며, 서버가 꺼지면 작동 x
  • Event 실행 시 로그를 확인하려면 설정에 따라 추가 옵션 필요
  • 복잡한 작업을 위해 여러 쿼리를 포함하는 경우 DELIMITER 설정 필요

🍯 실습하기

1. 테이블 생성

CREATE TABLE sample_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2. Event Scheduler 활성화

활성화 SQL

현재 상태 확인
SHOW VARIABLES LIKE 'event_scheduler';

활성화 - 상태가 off라면 실시
SET GLOBAL event_scheduler = ON;


ㄴ 저는 현재 사태가 ON으로 출력되어서 따로 활성화 하지 않았습니다.

3. Event Scheduler 생성

1분마다 데이터 삽입하기

CREATE EVENT insert_sample_data
ON SCHEDULE EVERY 1 MINUTE
DO
INSERT INTO sample_table (data) VALUES ('Hello, Event Scheduler!');

~ 1분뒤~

ㄴ 자동으로 INSERT된 것 확인 가능!

4. 현재 시각으로부터 5분 후 데이터 삭제하기

CREATE EVENT delete_all_data
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
DO
DELETE FROM sample_table;

실행 시점: CURRENT_TIMESTAMP + INTERVAL 5 MINUTE (현재 시각으로부터 5분 후)
실행할 작업: DELETE FROM sample_table (모든 데이터 삭제)

** 8:40분에 delete 스케쥴러 실행

~5분 뒤~

5. 특정 기간 동안만 반복 실행하기

CREATE EVENT repeat_for_period
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
DO
INSERT INTO sample_table (data) VALUES ('Repeating Event');

실행 주기: EVERY 1 MINUTE
실행 기간: STARTS 현재 시각부터 ENDS 현재시각으로부터 10분 뒤까지 실행
실행 작업: INSERT INTO sample_table

+) 이벤트 목록 확인하기

SHOW EVENTS;

ㄴ 4,5번 실습은 단발성이거나 특정 기간 동안만 반복하기 때문에 그 후에는 자동 삭제되어 잡히지 않음

+) 이벤트 삭제하기

DROP EVENT IF EXISTS delete_all_data;
DROP EVENT IF EXISTS repeat_for_period;

🍯 전체 실습 코드

-- 테이블 생성
CREATE TABLE IF NOT EXISTS event_scheduler_test (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 현재 상태 확인
SHOW VARIABLES LIKE 'event_scheduler';

-- 1번과제
CREATE EVENT insert_sample_data
ON SCHEDULE EVERY 1 MINUTE
DO
INSERT INTO event_scheduler_test (data) VALUES ('Hello, Event Scheduler!');

-- 2번과제
CREATE EVENT delete_all_data
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
DO
DELETE FROM event_scheduler_test;

-- 3번 과제
CREATE EVENT repeat_for_period
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
DO
INSERT INTO event_scheduler_test (data) VALUES ('Repeating Event');


-- 확인
show events;

SELECT * FROM event_scheduler_test;

SELECT * FROM information_schema.EVENTS;


profile
Developer's Logbook

0개의 댓글