728x90
반응형
안녕하세요!
MySQL 이벤트 스케줄러를 사용하면, 정기적으로 반복되는 작업(예: 로그 정리, 데이터 백업, 오래된 레코드 업데이트 등)을 데이터베이스 내부에서 자동으로 실행할 수 있다고 해요!
이번 포스팅에서는 이벤트 스케줄러를 조회, 생성, 삭제하는 방법과 이벤트 쿼리 작성법에 대해 알아보도록 할게요. 🚀
1. 이벤트 스케줄러 조회 🔍
1-1. 이벤트 스케줄러 상태 확인
먼저 이벤트 스케줄러가 활성화되어 있는지 확인해봅시다.
MySQL 클라이언트에서 아래 명령어를 입력해 보세요.
SHOW VARIABLES LIKE 'event_scheduler';
결과가 ON이면 이벤트 스케줄러가 활성화된 상태예요.
만약 OFF라면, 다음 명령어로 활성화할 수 있어요.
SET GLOBAL event_scheduler = ON;
1-2. 현재 등록된 이벤트 조회
현재 데이터베이스에 등록된 이벤트 목록을 확인하려면 아래 명령어를 사용하세요.
SHOW EVENTS;
2. 이벤트 스케줄러 생성 🛠️
이제 이벤트를 생성해볼게요!
예를 들어, SOOBIN_INFO 테이블에서 created_date가 현재 날짜 기준 180일 이전인 레코드의 use_yn 값을 'N'으로 업데이트하는 이벤트를 만들겠습니다.
CREATE DEFINER=`soobin`@`%` EVENT `delete_soobin_old_records`
ON SCHEDULE EVERY 1 DAY
STARTS '2025-03-01 01:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
BEGIN
UPDATE SOOBIN_INFO
SET use_yn = 'N',
last_modified_date = NOW(),
stop_date = NOW()
WHERE created_date < DATE_SUB(CURDATE(), INTERVAL 180 DAY);
END;
설명:
- DEFINER: 이벤트를 생성한 계정( soobin@% )을 지정해요.
- ON SCHEDULE EVERY 1 DAY STARTS ...: 매일 정해진 시간에 이벤트가 실행돼요.
- ON COMPLETION NOT PRESERVE: 실행 후 이벤트 인스턴스는 보존하지 않아요.
- DO BEGIN ... END; 이벤트가 실행될 때 수행할 SQL 구문을 작성하는 블록입니다.
3. 이벤트 스케줄러 삭제 🗑️
만약 더 이상 이벤트가 필요 없다면, 아래와 같이 삭제할 수 있어요.
DROP EVENT IF EXISTS delete_soobin_old_records;
이 명령어는 이벤트가 존재하면 삭제하고, 없으면 오류 없이 넘어갑니다.
4. 이벤트 쿼리 작성법 ✍️
이벤트 쿼리를 작성할 때 유의할 점 몇 가지를 정리해볼게요:
- 날짜/시간 형식:
이벤트 스케줄의 시작 시간은 YYYY-MM-DD HH:MM:SS 형식으로 지정하고, 날짜 계산에는 NOW(), CURDATE(), DATE_SUB() 등 MySQL 내장 함수를 활용하세요. - BEGIN ... END 블록:
여러 SQL 구문을 실행할 경우, BEGIN과 END 사이에 각 구문을 세미콜론(;)으로 구분해서 작성해야 해요. - DEFINER와 실행 권한:
이벤트는 DEFINER 계정의 권한으로 실행돼요. 계정이 없거나 권한이 부족하면 오류가 발생할 수 있으니 주의하세요. - ON COMPLETION 옵션:
ON COMPLETION PRESERVE를 사용하면 이벤트 실행 후에도 이력을 남길 수 있고, NOT PRESERVE를 사용하면 실행된 인스턴스를 삭제해요.
728x90
반응형
'개발중 > MYSQL' 카테고리의 다른 글
MySQL 8 my.ini 없을 경우 (Window) (0) | 2024.03.19 |
---|---|
[CentOS 7] MYSQL 방화벽 설정 해제 (0) | 2023.03.21 |
[MySQL8] Authentication method 'caching_sha2_password' not supported by any of the available plugins.| (0) | 2023.03.21 |
[MySQL] EXPLAIN (실행계획) 에 나오는 Extra 분석하기 (0) | 2023.03.18 |
[MYSQL] Transaction And Lock (트랜잭션과 잠금) (MyISAM / InnoDB) (0) | 2023.03.04 |
댓글