MySQL scheduled event
들어가며
프로젝트를 진행하던 중.... 비밀번호 찾기의 로직을 구현 중에 어떻게 해야 안전하게 비밀번호를 변경할 수 있을까 고민이 들게 되었다. 그래서 처음에는 static 변수에 선언해서 구현을 하는 도중.. 다른 사용자가 비밀번호 찾기 기능을 사용한다고 하면 이전사용자의 정보는 바뀌게 되어 사용할 수 없는 치명적인 오류가 발생하는 것이었다. 그래서 현재 프로젝트에서는 NoSQL을 사용하고 있지 않아서 MySQL에서 지원하는 event를 사용을 하도록 했다. 이번 포스팅에서는 어떻게 event를 사용하는지 알아보도록 하자
MySQL scheduled event란
MySQL에서의 이벤트는 일정한 주기나 특정한 시간에 자동으로 쿼리를 실행해주는 작업이라고 할 수 있습니다. 이런 기능을 주로 개발자가 직접 쿼리를 통해 사용하는 것이 아닌 백그라운드에서 일정 시간마다 삭제를 해주는 역할을 해줍니다.
구성 요소
//기본 문법
CREATE EVENT [이벤트 이름]
ON SCHEDULE [스케줄러]
STARTS [시작 시간]
COMMENT [이벤트의 설명]
DO [ SQL 블록]
- 이벤트 이름 (Event Name): 이벤트를 식별하는 이름입니다.
- 스케줄 (Schedule): 이벤트가 실행되는 주기나 시간을 정의합니다.
- 주기적인 작업일 경우 : "EVERY" 키워드와 "INTERVAL" 값을 사용해서 작성한다.
- 특정 시간에 작업일 경우 : "AT" 키워드를 작성해준다.
- STARTS : 최초의 시작 시간을 정의한다.
- 설명 (Comment): 이벤트에 대한 설명을 추가할 수 있습니다.
- 실행 문 (DO): 이벤트가 실행될 때 수행할 SQL 문이나 SQL 문 블록을 정의합니다.
MySQL scheduled event 사용법
event 상태 체크
SHOW VARIABLES LIKE 'event%'; //현재 이벤트가 실행중인지 확인
기본 값으로는 OFF로 되어있다.
SET GLOBAL event_scheduler = ON; // 이벤트 ON
SET GLOBAL event_scheduler = OFF; // 이벤트 OFF
이벤트를 ON으로 변경하고 다시 SHOW로 보면 ON으로 변경되어 있는 걸 볼 수 있다.
event 생성
CREATE EVENT delete_colume
ON SCHEDULE every 1 minute
STARTS '2024-03-29 00:00:00'
COMMENT '1분마다 실행하는 삭제쿼리'
DO
delete from test.account_retrieval;
CREATE를 통해 쿼리를 예시를 위해서 1분 안에 삭제하도록 설정 시작시간은 블로그 작성일인 3월 29일로 설정
event 조회
SHOW EVENTS FROM [데이터베이스명]
show events from test; //현재 스키마는 test
정상적으로 event가 등록된 것을 볼 수 있다. Type에 RECURRING로 반복적으로 사용하게되어있는것을 볼수있다.
쿼리의 액션을 봐보면 따로 dlete 쿼리를 날려주지 않았는데도 해당 테이블이 삭제된 것을 볼 수 있다.
하지만 1분은 너무 짧으니 되도록이면 자신의 프로젝트의 맞게 시간을 설정해 주면 좋을 것입니다.
event 삭제
//문법
delete from mysql.event
where db = [데이터베이스명]
and name = [만든 EVENT명];
//예시
delete from mysql.event
where db = 'test'
and name = 'delete_colume';
정상적으로 삭제된 것을 볼 수 있다.
참고
'MySQL' 카테고리의 다른 글
[MySQL]FULLTEXT with N-GRAM 전문 검색 을 사용한 최적화 (0) | 2024.07.12 |
---|---|
[MySQL] CSV 파일 Import 및 Export: 간편 가이드 (3) | 2024.06.18 |
[MySQL] [2]인덱스(Index)란-"R-Tree, 전문검색(n-gram),함수 기반,멀티 밸류, 클러스터링,유니크"인덱스란? (0) | 2024.02.08 |
[MySQL] [1]인덱스(Index)란-B-Tree? (0) | 2024.02.08 |
[MySQL] 데이터 암호화란? (2) | 2024.01.27 |