Event Scheduler
✒️ 2025-05-28 17:32 내용 수정
특정 이벤트를 정해진 시간 혹은 주기마다 실행하도록 설정한 것
- MySQL 공식 문서 : MySQL Using the Event Scheduler
- 참고 자료 : 동석해요's MySQL Event 간단 이해하기
- 한 개 혹은 그 이상의 sql문을 EVENT로 지정하여 특정 스케쥴마다 실행하도록 설정할 수 있다.
- 예 : 만료 기한이 지난 데이터를 DB에서 자동으로 삭제하도록 처리한다.
- 일시적 트리거(temporal triggers)로도 알려져 있으며, 이는 시간의 경과에 따라 발동되는 Object라는 의미를 내포한다.
- 이벤트 스케쥴러를 사용하려면 privilege가 있어야 하며,
event scheduler를 활성화한 후 사용할 수 있다.- 권한 관련 설정은 MySQL The Event Scheduler and MySQL Privileges 참고.
- 실제 프로젝트에 적용했을 땐 이미 권한 설정과 활성화가 되어 있던 것인지 추가 권한 부여가 안된 상태로도 event scheduler가 작동되었다.
SET GLOBAL event_scheduler = ON;
- EVENT 작성은 EVENT 이름, 이벤트를 실행할 날짜나 주기, 동작 내용을 작성한다.
- 참고 자료 : MySQL CREATE EVENT Statement
- 필요에 따라 EVENT 지정 유저, COMPLETION, ENABLE, COMMENT 등의 옵션도 추가할 수 있다.
CREATE EVENT `이벤트이름`
ON
SCHEDULE schedule
DO
SQL문;
-- schedule
AT timestamp [ + INTERVAL interval] ...
| EVERY INTERVAL
[STARTS timestamp [ + INTERVAL interval] ...]
[ENDS timestamp [ + INTERVAL interval] ...]
-- interval
YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE
| DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND
- 전체 이벤트 조회
-- 이벤트 전체 조회
SHOW EVENTS;
- 이벤트 수정 :
ALTER를 사용하며, 나머지 구문은CREATE와 비슷하다.
-- 이벤트 수정(ALTER 사용)
ALTER EVENT `event_name`
ON
SCHEDULE EVERY 30 MINUTE
DO
SQL문;
- 이벤트 제거
-- 이벤트 삭제
DROP EVENT `event_name`;
적용 예시
- 인증 및 만료 정보를 저장하는 테이블에서 만료 날짜가 현재 날짜보다 작을 경우(즉 만료됨), 데이터를 자동으로 제거한다.
- 이 때 이벤트 발동 주기는 30분으로 지정했다. 만드려는 서비스에 따라 적절하게 선택하면 될 것 같다.
CREATE EVENT `event_name`
ON SCHEDULE
EVERY 30 MINUTE
DO
DELETE FROM verification WHERE date_expired < CURRENT_TIMESTAMP(3);