주기적으로 서버에서 어떤 작업을 해야할 때, 서버에서는 Cron / Batch / Event 등을 통하여 주기적인 작업을 진행한다.
DB에서도 주기적으로 작업을 해줘야 하는 것이 있다.
대표적인 것으로는 특정 Event에 따라 별도의 테이블에 데이터를 자동적으로 이관한다거나, 자동으로 데이터 백업을 해야 하는 것 등이 있을 것이다.
Trigger과 같은 기능을 사용해도 유사한 기능을 수행할 수 있으나, Trigger는 어떠한 이벤트가 발생했을 때 사용되는 것이기 때문에, 주기적인 작업에는 적합하지 않다고 볼 수 있다.
또한, DB를 사용하는 서버(Application)에서 주기적으로 쿼리를 DB로 요청할 수도 있다.
하지만 이 경우에는 Application이 비정상 작동 또는 장애가 발생했을 경우가 있을 수 있으므로, 장애 포인트가 하나 늘어난다고 볼 수 있다.
(물론 과거에 MySQL, MariaDB의 Event Scheduler의 성능이 떨어진다는 이야기도 있었으나, 최근에는 많이 개선되었다고 하고, 시스템별로 느슨한 연결을 하기 위하여 DB의 Event Scheduler 사용도 필요하다.)
우선, MariaDB에서 별도로 설정하지 않았다면, Event 옵션은 Off 상태이다.
이를 활성화시키기 위해서 두가지 방법 중 하나를 선택하면 된다.
1. Option 변경
1 2 3 4 5 | -- MariaDB event scheduler 활성화 SET GLOBAL event_scheduler = ON ; SET @@ global .event_scheduler = ON ; SET GLOBAL event_scheduler = 1; SET @@ global .event_scheduler = 1; |
2. my.ini (Linux에서는 my.cnf ) 에 설정 추가
event_scheduler = ON
*1번의 경우에는 Event Scheduler 사용을 위해 재시작이 필요없지만, 다음 재시작 때에는 Event Scheduler가 설정값을 따른다 (기본은 Off)
*2번의 경우에는 재시작을 해야만 설정에 추가되며, 한번 재시작 하고 난 다음에는 시작마다 설정이 On 되어 있다.
1 2 | -- Event 변수 확인 show variables like 'event%' ; |
1 2 3 4 5 6 7 | -- Event 생성 CREATE EVENT IF NOT EXISTS EV_BACKUP_TABLE ON SCHEDULE EVERY 1 MINUTE -- Event 실행 주기 STARTS ' 2016-12-08 10:00:00' -- Event 최초 시작 시간 DO CALL SP_BACKUP_TABLE_CREATE(); -- Event에서 수행할 명령어 |
1 2 3 4 5 6 | -- Event 목록 확인 SHOW EVENTS ; SELECT * FROM INFORMATION_SCHEMA.EVENTS; -- Event 삭제 drop event EV_BACKUP_TABLE; |
출처: http://fernweh6990.tistory.com/150 [KnockKnock]