데이터베이스에서 반복적인 작업을 자동으로 처리하고 싶을 때, 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 스케줄러 기능을 활용하면 정기적인 작업을 자동화하여 운영 효율성을 크게 높일 수 있습니다.
단순 반복 작업뿐만 아니라 로그 정리, 통계 리셋, 만료 데이터 제거 등 다양한 목적에 유용하게 쓰이니, 적절한 타이밍과 조건을 설정해 활용해 보시길 바랍니다.
'개발 > DB' 카테고리의 다른 글
MySQL에서 트랜잭션 충돌 해결 방법: 데드락과 락 대기 방지하기 (0) | 2025.08.30 |
---|---|
MySQL에서 대용량 데이터 처리 최적화 방법: 성능을 높이는 실전 팁 (0) | 2025.08.29 |
MySQL에서 쿼리 최적화: 실행 계획 분석하기 (2) | 2025.08.27 |
MySQL에서 SQL Injection 방어 방법 (1) | 2025.08.26 |
MySQL에서 데이터베이스 보안 강화 방법 (0) | 2025.08.25 |