IT's Jenna

Mysql 이벤트 스케쥴러 (Event Scheduler) 본문

Mysql

Mysql 이벤트 스케쥴러 (Event Scheduler)

developer Jenna 2021. 6. 23. 15:45

Mysql에서 주기적으로 DB에 어떤 작업을 해주어야 할 때가 있다. 예를 들어 지속적으로 쌓이는 temporary 데이터가 있는데 해당 테이블을 자주 비워줌으로써 용량 차지가 되지 않게끔 하고자 한다. 이때 개발자가 매번 직접 테이블을 비울 필요 없이 DB 자체에 어떤 이벤트를 걸어주고 해당 이벤트가 주기적으로 반복되게끔 할 수 있다. 그것이 이벤트 스케쥴러다.

1. 기본 설정

우선 mysql 자체적으로 이벤트 스케쥴러 사용이 가능하게끔 설정되어 있는지 확인한다.

SHOW VARIABLES LIKE 'event%';

혹시 Value가 OFF가 되어 있으면 아래 명령어를 통해 설정을 ON으로 바꿔주어야 이벤트 스케쥴러가 동작한다.

SET GLOBAL event_scheduler = ON;

2. 이벤트 스케줄러 확인

이미 생성되어 있는 이벤트 스케줄러를 확인한다.

SELECT * FROM information_schema.events;

3. 이벤트 스케쥴러 생성

이벤트 스케쥴러를 생성한다. 나는 ip 테이블을 초기화시키는 TRUNCATE 함수가 매주 반복되게끔 이벤트를 걸어주었다. 이때 주의할점은 해당 이벤트는 DB에 개별적으로 걸리는 것이므로 이벤트를 생성할 때 DB를 더블클릭한 상태에서 해주어야 한다.

CREATE EVENT ip_reset
ON SCHEDULE EVERY 1 WEEK
-- STARTS '2021-06-23 02:09:00'
COMMENT 'ip 정보 삭제'
DO
TRUNCATE TABLE ip;
  • CREAT EVENT 이벤트명
  • ON SCHEDULE EVERY 반복주기 : MONTH, WEEK, DAY, HOUR 등 사용 가능
  • STARTS '시간' : 해당 시간부터 시작, 시작시간 설정하지 않는 경우 이벤트 생성 후 다음 주기부터 실행
  • COMMENT '주석'
  • DO 동작 : 반복적으로 진행할 동작 입력

4. 이벤트 삭제

이벤트 명을 이용해서 이벤트를 삭제할 수 있다.

DROP event ip_reset;

 

+ mysql 시간 확인

SELECT now()를 이용하면 mysql의 현재시간을 알 수 있다.

SELECT now();

 

'Mysql' 카테고리의 다른 글

Mysql emoji 삽입하기 (node.js)  (0) 2022.05.10
Mysql - LIMIT  (0) 2021.05.12
Mysql - group_concat  (0) 2021.04.26
Mysql - ORDER BY & ALIAS  (0) 2021.04.26
Mysql - GROUP BY & CASE  (0) 2021.01.21
Comments