개발중/MYSQL

[MYSQL] 이벤트 스케쥴러 (Event Scheduler) 사용법 🎉

Binsoo 2025. 3. 26.
728x90
반응형

 

안녕하세요!
MySQL 이벤트 스케줄러를 사용하면, 정기적으로 반복되는 작업(예: 로그 정리, 데이터 백업, 오래된 레코드 업데이트 등)을 데이터베이스 내부에서 자동으로 실행할 수 있다고 해요!


이번 포스팅에서는 이벤트 스케줄러를 조회, 생성, 삭제하는 방법과 이벤트 쿼리 작성법에 대해 알아보도록 할게요. 🚀

 

1. 이벤트 스케줄러 조회 🔍

1-1. 이벤트 스케줄러 상태 확인

먼저 이벤트 스케줄러가 활성화되어 있는지 확인해봅시다.
MySQL 클라이언트에서 아래 명령어를 입력해 보세요.

SHOW VARIABLES LIKE 'event_scheduler';

 

 

결과가 ON이면 이벤트 스케줄러가 활성화된 상태예요.

 

만약 OFF라면, 다음 명령어로 활성화할 수 있어요.

 

SET GLOBAL event_scheduler = ON;

 

1-2. 현재 등록된 이벤트 조회

 

현재 데이터베이스에 등록된 이벤트 목록을 확인하려면 아래 명령어를 사용하세요.

 

SHOW EVENTS;
 
 

2. 이벤트 스케줄러 생성 🛠️

이제 이벤트를 생성해볼게요!
예를 들어, SOOBIN_INFO 테이블에서 created_date가 현재 날짜 기준 180일 이전인 레코드의 use_yn 값을 'N'으로 업데이트하는 이벤트를 만들겠습니다.

 

CREATE DEFINER=`soobin`@`%` EVENT `delete_soobin_old_records`
ON SCHEDULE EVERY 1 DAY
STARTS '2025-03-01 01:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
BEGIN
    UPDATE SOOBIN_INFO
       SET use_yn = 'N',
           last_modified_date = NOW(),
           stop_date = NOW()
     WHERE created_date < DATE_SUB(CURDATE(), INTERVAL 180 DAY);
END;
 
 
설명:
  • DEFINER: 이벤트를 생성한 계정( soobin@% )을 지정해요.
  • ON SCHEDULE EVERY 1 DAY STARTS ...: 매일 정해진 시간에 이벤트가 실행돼요.
  • ON COMPLETION NOT PRESERVE: 실행 후 이벤트 인스턴스는 보존하지 않아요.
  • DO BEGIN ... END; 이벤트가 실행될 때 수행할 SQL 구문을 작성하는 블록입니다.

 

3. 이벤트 스케줄러 삭제 🗑️

만약 더 이상 이벤트가 필요 없다면, 아래와 같이 삭제할 수 있어요.

 

DROP EVENT IF EXISTS delete_soobin_old_records;
 
 
이 명령어는 이벤트가 존재하면 삭제하고, 없으면 오류 없이 넘어갑니다.

 

4. 이벤트 쿼리 작성법 ✍️

이벤트 쿼리를 작성할 때 유의할 점 몇 가지를 정리해볼게요:

  • 날짜/시간 형식:
    이벤트 스케줄의 시작 시간은 YYYY-MM-DD HH:MM:SS 형식으로 지정하고, 날짜 계산에는 NOW(), CURDATE(), DATE_SUB() 등 MySQL 내장 함수를 활용하세요.
  • BEGIN ... END 블록:
    여러 SQL 구문을 실행할 경우, BEGIN과 END 사이에 각 구문을 세미콜론(;)으로 구분해서 작성해야 해요.
  • DEFINER와 실행 권한:
    이벤트는 DEFINER 계정의 권한으로 실행돼요. 계정이 없거나 권한이 부족하면 오류가 발생할 수 있으니 주의하세요.
  • ON COMPLETION 옵션:
    ON COMPLETION PRESERVE를 사용하면 이벤트 실행 후에도 이력을 남길 수 있고, NOT PRESERVE를 사용하면 실행된 인스턴스를 삭제해요.
728x90
반응형

댓글