본문 바로가기

DB

MySQL 이벤트 스케줄러 등록

728x90

MySQL에는 이벤트 스케줄러가 있어서 등록한 이벤트를 주기적으로 실행할 수 있다.

보통 주기적으로 돌려야할 프로시저를 스케줄러에 이벤트로 많이 이용한다.

 

스케줄러는 event_scheduler 값이 ON 상태가 되어있지 않으면 동작 하지않는다. 

쿼리로 쉽게 조회할 수 있고, 클라우드의 RDS라면 콘솔에서 확인이 가능할 것이다.

 

쿼리로 조회

SHOW variables LIKE 'event%'

 

쿼리 상태 수정

SET GLOBAL event_scheduler = ON이나 OFF

 

AWS RDS 경우 RDS 메뉴 > 파라미터 그룹으로 가면 event_scheduler 검색으로 조회할 수 있고 수정도 가능하다.

 

 

스케줄러

이벤트 목록 SELECT

SELECT * FROM information_schema.EVENTS

 

이벤트 삭제

DROP EVENT `이벤트명`

 

이벤트 스케줄러에 등록

CREATE  EVENT IF NOT EXISTS [이벤트 이름] 

ON SCHEDULE [이벤트 실행 또는 반복 시간]

STARTS [스케줄 시작 시간]

ENDS [스케줄 종료 시간] 

ON COMPLETION NOT PRESERVE ENABLE 

COMMENT [코멘트]

DO [실행할 명령문];

IF NOT EXISTS로 이벤트 명이 존재하지 않는 조건을 넣어주었다.

 

ENDS는 넣지 넣지 않으면 종료하기 전까지 계속 실행한다. 난 주로 안넣는다.

 

ON COMPLETION NOT PRESERVE은 이벤트 완료 후 삭제 하지 않겠다는 설정이다. 완료 후 삭제하고 싶으면 NOT을 빼면 된다.

 

ENABLE은 이벤트 활성화 상태를 말한다.

DISABLE이 비활성화다.

 

등록 예)

CREATE EVENT IF NOT EXISTS 이벤트명
ON SCHEDULE EVERY 1 DAY
STARTS '2021-08-26 00:00:00'
ON COMPLETION NOT PRESERVE ENABLE
DO CALL 프로시저명

STARTS가 시작 기준날짜인데 00:00:00 이므로 매일 0시에 동작할 예정이다.

매일 시작하는 시간을 지정하고 싶을땐 기준시각을 수정해도 되지만

DAY_HOUR을 사용하는 방법도 있다.

 

CREATE EVENT IF NOT EXISTS 이벤트명
ON SCHEDULE EVERY 1 DAY_HOUR
STARTS '2021-08-26 01:00:00'
ON COMPLETION NOT PRESERVE ENABLE
DO CALL 프로시저명

 

728x90