MySQL에서 자동화된 스케줄러 사용하기

 

데이터베이스에서 반복적인 작업을 자동으로 처리하고 싶을 때, MySQL의 EVENT 스케줄러 기능을 활용하면 효율적인 자동화를 구현할 수 있습니다. 백업, 로그 정리, 통계 갱신 등 주기적인 쿼리를 수동으로 실행하지 않고, 정해진 시간에 자동 수행 되도록 설정할 수 있죠.

 


1. EVENT 스케줄러란?

EVENT는 MySQL에서 시간 기반 작업을 자동으로 실행 하도록 설정할 수 있는 기능입니다. 마치 리눅스의 cron처럼 작동하지만, MySQL 내부에서 직접 실행 된다는 점이 특징입니다.


2. EVENT 스케줄러 활성화

이벤트 기능은 기본적으로 비활성화되어 있을 수 있으므로 다음 명령어로 활성화해야 합니다.


SET GLOBAL event_scheduler = ON;
  

또는 my.cnf 설정 파일에 아래와 같이 명시해 항상 활성화할 수 있습니다.


event_scheduler=ON
  

3. 기본 이벤트 생성 예제

매일 자정마다 특정 테이블의 데이터를 초기화하는 예제입니다.


CREATE EVENT reset_daily_data
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_DATE + INTERVAL 1 DAY
DO
  UPDATE stats SET daily_count = 0;
  
  • ON SCHEDULE EVERY 1 DAY : 매일 실행
  • STARTS CURRENT_DATE + INTERVAL 1 DAY : 다음 날 자정부터 시작
  • DO 아래에 실행할 SQL문을 작성

4. 반복 주기 설정 방법

EVERY 문법으로 다양한 반복 주기를 설정할 수 있습니다.


-- 5분마다 실행
EVERY 5 MINUTE

-- 매주 월요일 오전 3시에 실행
EVERY 1 WEEK
STARTS TIMESTAMP(CURRENT_DATE, '03:00:00')
  

5. 일회성 이벤트 만들기

한 번만 실행되는 이벤트도 만들 수 있습니다.


CREATE EVENT delete_expired
ON SCHEDULE AT TIMESTAMP(CURRENT_DATE + INTERVAL 1 DAY)
DO
  DELETE FROM sessions WHERE expired = 1;
  

6. 이벤트 확인 및 관리

    • 이벤트 목록 확인
SHOW EVENTS;
    • 이벤트 상태 확인

SELECT EVENT_NAME, STATUS, LAST_EXECUTED
FROM information_schema.EVENTS;
    
    • 이벤트 수정

ALTER EVENT event_name ON COMPLETION PRESERVE ENABLE;
    
    • 이벤트 삭제

DROP EVENT IF EXISTS event_name;
    

7. 주의사항 및 팁

  • EVENT 스케줄러는 서버가 실행 중일 때만 작동합니다.
  • MySQL 클러스터 환경이나 복제 환경에서는 동기화에 주의해야 합니다.
  • 대량 처리 작업은 트랜잭션을 함께 사용하는 것이 좋습니다.
  • 로그나 백업을 남기려면 이벤트 내부에서 로그 테이블에 INSERT 하도록 구성하세요.

 

MySQL의 EVENT 스케줄러 기능을 활용하면 정기적인 작업을 자동화하여 운영 효율성을 크게 높일 수 있습니다.
단순 반복 작업뿐만 아니라 로그 정리, 통계 리셋, 만료 데이터 제거 등 다양한 목적에 유용하게 쓰이니, 적절한 타이밍과 조건을 설정해 활용해 보시길 바랍니다.