Mysql 이벤트 스케줄러 사용하기
사용가능한 버전 확인
- mysql 5.16
- 이 포스트에서 사용하는 버전: MariaDB 10.2.9
이벤트 스케줄러 사용하도록 설정
- option 설정
MariaDB [(none)]> SET GLOBAL event_scheduler = ON; Query OK, 0 rows affected (0.00 sec)
- option 설정 확인
MariaDB [(none)]> show variables like 'event%'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | event_scheduler | ON | +-----------------+-------+ 1 row in set (0.00 sec)
- mysql 서버 재기동에도 스케줄러 동작하도록 my.cnf 설정 값 추가
$ cat my.cnf [mysqld] event_scheduler = ON
- option 설정
- 이벤트 스케줄러 생성
- 생성문:
CREATE EVENT IF NOT EXISTS 이벤트 이름 ON SCHEDULE EVERY 1 {INTERVAL_VALUE} STARTS CURRENT_TIMESTAMP DO {SQL 문 | call 프로시저}
- INTERVAL_VALUE 변수:
- YEAR , QUARTER , MONTH , DAY , HOUR , MINUTE , WEEK , SECOND , YEAR_MONTH , DAY_HOUR , DAY_MINUTE , DAY_SECOND , HOUR_MINUTE , HOUR_SECOND , MINUTE_SECOND
- 예제: 매일 datetime 을 비교하여 하루 이상된 데이터를 삭제하는 스케줄러
CREATE EVENT IF NOT EXISTS delete_row ON SCHEDULE EVERY 1 DAY STARTS CURRENT_TIMESTAMP DO DELETE FROM testdb.testtable where date(ts) <= date(subdate(now(), interval 1 DAY));
- 생성문:
- 이벤트 스케줄러 등록 확인
MariaDB [(none)]> select EVENT_SCHEMA,EVENT_NAME,INTERVAL_FIELD from information_schema.events; +--------------+------------+----------------+ | EVENT_SCHEMA | EVENT_NAME | INTERVAL_FIELD | +--------------+------------+----------------+ | testdb | delete_row | DAY | +--------------+------------+----------------+ 1 row in set (0.00 sec)