티스토리 뷰
MariaDB 테이블의 특정 필드값에 대해 어떤 조건이 충족하는 경우 주기적으로 삭제 처리하는 작업을 위하여
자동으로, 그리고 주기적으로 쿼리를 실행하는 방법이 필요하여 EVENT Scheduler 기능을 이용해보았다.
1. event가 자동으로 실행되도록 하기 위해서는 event_scheduler 변수를 ON으로 설정해줘야 한다.
(주의: 이 설정은 서버가 재실행되는 경우 리셋(OFF로 전환)된다.)
SET GLOBAL event_scheduler = ON;
-> cf. 이벤트가 잘 돌아가고 있다고 생각했으나 돌고 있지 않아 event_scheduler 변수값을 확인해보니 아래와 같이 OFF로 바뀌어 있는 것을 발견했다.
# SHOW VARIABLES WHERE VARIABLE_NAME = 'event_scheduler';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | OFF |
+-----------------+-------+
event_scheduler 변수를 영구적으로 ON 설정하고 싶은 경우 my.cnf 파일의 [mysqld]에 event_scheduler = on을 꼭 추가해줘야 한다.
[mysqld]
event_scheduler = on
2. 반복 실행하고 싶은 쿼리를 반복 주기와 함께 이벤트로 생성한다.
-- my_delete_event라는 이름의 이벤트가 존재하지 않는 경우 my_delete_event 이벤트 생성
-- 2020-01-01부터 1일마다 스케쥴 반복
-- DO 이하의 쿼리를 반복 실행 (여기서는 end_date값이 현재 시간에서 7일 이전인 경우 삭제처리하는 쿼리)
CREATE EVENT IF NOT EXISTS my_delete_event
ON SCHEDULE EVERY '1' DAY STARTS '2020-01-01'
DO DELETE FROM my_table WHERE `end_date` < (NOW() - INTERVAL 7 DAY);
반복 주기는 {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND} 중에서 정할 수 있다.
3. 이벤트 생성이 잘 되었는지 확인한다.
SHOW EVENTS;
4. 이벤트가 마지막으로 실행된 시점을 확인할 수 있다.
SELECT last_executed FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'my_delete_event';
728x90
댓글