728x90
DB 작업을 하다 보면 정해진 시간마다 자동으로 어떤 작업을 실행해야 할 때가 있습니다. 예를 들어:
- 매일 새벽에 로그 데이터를 정리하고 싶을 때
- 특정 시간마다 상태 값을 초기화해야 할 때
- 자동 백업, 알림, 통계 갱신 등…
이런 작업을 누가 대신해줬으면 좋겠죠?
바로 이럴 때! MySQL의 이벤트 스케줄러(Event Scheduler) 를 사용하면 아주 편리합니다. 오늘은 이 이벤트 스케줄러에 대해 자세히 알아보겠습니다.
이벤트 스케줄러란?
MySQL 이벤트 스케줄러는 특정 시간에 자동으로 SQL 명령을 실행하는 일정 관리자입니다.
쉽게 말해, MySQL 자체에 내장된 타이머 기능이라고 생각하시면 됩니다.
즉, cron이나 윈도우 작업 스케줄러 같은 걸 DB 안에서 직접 구현할 수 있어요!
1. 이벤트 스케줄러 켜기
MySQL에서는 기본적으로 이벤트 스케줄러가 비활성화되어 있습니다.
먼저 이 기능을 활성화해야 합니다.
-- 현재 이벤트 스케줄러 상태 확인
SHOW VARIABLES LIKE 'event_scheduler';
-- ON으로 설정
SET GLOBAL event_scheduler = ON;
주의: 위 설정은 MySQL을 재시작하면 초기화되기 때문에, 영구적으로 설정하려면 my.cnf 또는 my.ini 파일에 아래와 같이 설정해 주세요:
event_scheduler=ON
2. 이벤트 생성하기
이벤트를 생성할 때는 CREATE EVENT 구문을 사용합니다.
📌 기본 문법
CREATE EVENT 이벤트_이름
ON SCHEDULE 스케줄_조건
DO
실행할_SQL;
✅ 예시: 매일 자정마다 logs 테이블 비우기
CREATE EVENT clear_logs
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO
DELETE FROM logs;
- EVERY 1 DAY : 하루에 한 번 실행
- STARTS : 언제부터 시작할지 지정
- DO : 실행할 SQL문
3. 이벤트 상태 확인 및 관리
🔍 현재 등록된 이벤트 보기
SHOW EVENTS;
또는 특정 데이터베이스에 있는 이벤트만 보려면:
SHOW EVENTS FROM 데이터베이스이름;
✏️ 이벤트 수정하기
ALTER EVENT 이벤트_이름
ON SCHEDULE EVERY 1 HOUR;
🛑 이벤트 끄기 (비활성화)
ALTER EVENT 이벤트_이름 DISABLE;
✅ 다시 켜기
ALTER EVENT 이벤트_이름 ENABLE;
❌ 이벤트 삭제
DROP EVENT IF EXISTS 이벤트_이름;
4. 반복 이벤트 vs 단일 이벤트
⏲ 반복 실행 이벤트
CREATE EVENT 반복_이벤트
ON SCHEDULE EVERY 1 HOUR
DO
UPDATE ...;
📅 한 번만 실행되는 이벤트
CREATE EVENT 단일_이벤트
ON SCHEDULE AT TIMESTAMP('2025-04-15 03:00:00')
DO
DELETE FROM temp_table;
5. 주의사항 및 팁
- 이벤트는 해당 이벤트를 만든 유저의 권한을 따릅니다.
- DEFINER 지정에 주의하세요:
이벤트 실행 시 DEFINER의 권한으로 작동합니다. - ON COMPLETION PRESERVE를 명시하지 않으면 단일 실행 이벤트는 실행 후 자동 삭제됩니다.
CREATE EVENT sample_event
ON SCHEDULE AT '2025-04-15 10:00:00'
ON COMPLETION PRESERVE
DO
UPDATE ...;
728x90
반응형