과거의나야도와줘

[MYSQL] EVENT SCHEDULER 연습 해보기 본문

개발공부노트/MYSQL

[MYSQL] EVENT SCHEDULER 연습 해보기

o_60__o 2022. 12. 29. 12:58
728x90

 

웹사이트를 만들 때 매 시간 혹은 매일마다 뭔가 작업을 해줘야 할 일이 있을 수 있습니다.

 

간단한 예로 매일 웹사이트의 일일 방문자 수를 초기화 하는 것이 있을 수 있겠죠

 

MySQL에서는 Event를 통해 이러한 작업을 할 수 있고 이를 Event Scheduler라고 합니다.

 

오늘은 EVENT SCHEDULER를 한번 짧게 연습해봤습니다.

 


1. Event Scheduler 사용 전 확인 할 것

 Event Scheduler를 사용하기전에 몇가지 확인 할 것이 있습니다.

 

1) MySQL 서버의 Event Scheduler 사용여부 확인

SHOW VARIABLES LIKE 'event%';

위 SQL 문을 실행하면 

이런 결과가 나옵니다 Value 부분이 ON이면 사용 할 수 있다는 것이고 만약 OFF 라면

SET GLOBAL event_scheduler = ON;

위 SQL 문을 실행하시면 됩니다

 


2) MySQL 내에 저장된 Event Scheduler가 있는지 확인

SHOW EVENTS;

SELECT * FROM information_schema.EVENTS;

위 두 SQL문은 현재 MySQL 내에 저장된 Event Scheduler가 있는지 확인해 줍니다

현재는 이벤트를 안 만들었으니 빈칸인게 정상입니다

 


2. Event Scheduler 구문

MySQL :: MySQL 8.0 Reference Manual :: 13.1.13 CREATE EVENT Statement

 

MySQL :: MySQL 8.0 Reference Manual :: 13.1.13 CREATE EVENT Statement

13.1.13 CREATE EVENT Statement 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; schedule: { AT timestamp [+ INTERVAL interv

dev.mysql.com

 

MySQL 공식문서에 EVENT 문을 어떻게 쓰는지 자세히 나와 있습니다.

[  ] <- 이 부분은 생략가능하다 라는 것만 아시면 크게 이해하기 어려운 부분은 없을 것입니다.

 

일단은 밑줄 친 부분만 사용할 것인데 간단한 해석을 하자면

 

CREATE : 생성하겠다

EVENT : 이벤트를

 

event_name : 이벤트 명을 적으시면 됩니다

 

ON SCHEDULE : 다음의 스케쥴에 맞춰서

schedule : 여기는 아래 schedule 의 형식에 맞춰 쓰시면 됩니다

 

schedule의 형식중에 AT timestamp는 딱 그 시간에 이벤트를 실행하고 끝나는 형식이고
EVERY interval은 매 인터벌마다 이벤트를 실행하는 것 입니다.

interval은 아래 interval 설명에 나오는 것처럼 연, 월, 일, 시, 분, 초 등등 여러 단위가 있습니다

STARTS와 ENDS는 옵션으로 언제부터 언제까지만 이벤트를 반복하겠다 라는 뜻입니다

 

COMMENT : 주석을 다는 곳입니다

 

DO event_body : DO 뒤에 이벤트로 실행할 SQL문을 적으시면 됩니다 

 


3. 실습 해보기

 

 이제 공식문서를 보고 여러분이 원하는대로 실습하면 됩니다.

 

 감이 안오시면 아래에는 제가 실습한 내용이 있으니 이걸 보고 따라하셔도 됩니다.

 


1) 간단한 테이블 생성

간단한 테이블을 만들었습니다.

마음대로 만드시면 되는데 TIMESTAMP 컬럼 하나는 넣어두시면 이벤트가 실행이 잘 되고 있는지 확인 하기 좋습니다

 


2) 일정 시간마다 이벤트를 발생시키기

1분마다 데이터를 등록하는 이벤트를 만들어봤습니다

 

시간이 지나고 테이블을 다시 조회해보니 이렇게 나왔습니다

 


3) 일정 시간 후 이벤트를 발생시키기

5분후에 데이터를 모두 삭제하는 이벤트를 만들어 봤습니다

SHOW EVENTS;

5분을 기다리는 동안 위에서 설명했던 이 SQL문을 실행시켜 이벤트가 잘 생성되었는지 확인합니다

 

윗줄은 아까 만든 1분 이벤트입니다

 

아랫줄은 제가 11시 52분에 위 이벤트를 생성했고 따라서

Execute at 컬럼을 보면 11시 57분에 이벤트가 실행된다는 것을 알 수 있습니다.

 

 

57분까지 잘 있던 테이블이

 

57분 55초에 이벤트가 발생되고 데이터가 전부 사라졌습니다

 

 

다시 SHOW EVENTS를 해보면 5분 이벤트가 실행된 후 사라진 것을 확인할 수 있습니다

 


4) 특정 기간 동안만 반복 실행하는 이벤트 만들기

1분 후부터 10초간 1초마다 테이블에 10이라는 데이터를 넣는 이벤트를 만들어 봤습니다

 

 

SQL문을 실행시켜 이벤트를 만든 시점이 12시 5분 54초 라는것을 알 수 있고

SHOW EVENTS를 해보면 1분후인 12시 6분 54초에 시작되고 12시 7분 4초까지 10초동안 실행 되는 것을 알 수 있습니다

 

 

실행이 잘 된 것을 볼 수 있습니다

 

이벤트의 기간을 정해줬으니 그 기간이 끝나면 더이상 이벤트가 일어날 일이 없으므로

이벤트는 소멸합니다


 

학습 후기

 

오늘은 간단히 실습만 해봤는데 여러 군데서 쓸 만한 SQL문인 것 같습니다. 좀 더 학습해서 실제 프로젝트에 적용시킬 수 있도록 해봐야 겠습니다.

 

 

 

 

 

 

 

 

728x90
Comments