강좌 & 팁
데이터를 주기적으로 삭제 하는 방법을 찾아 보다가 MySQL이벤트 스케줄러라는걸 알게 되었습니다.
이번 시간에는 MySQL이벤트 스케줄러 를 사용해서 데이터를 주기적으로 삭제하는 방법에대해서 알아보도록 하겠습니다.
스케줄러 사용방법은 다음과 같습니다.
1. 커맨드 창에서 MySQL에 접속합니다.
2. 이벤트 스케줄러 활성화 시킵니다.
3. 이벤트를 등록합니다.
그럼 위와 같은 순서대로 진행 해 보겠습니다.
1. 커맨드 창에서 MySQL에 접속합니다.
1-1. 커맨드 창을 연다음 mysql -u아이디 -p패스워드 을 입력해서 MySQL에 접속합니다.
2. 이벤트 스케줄러 활성화 시킵니다.
2-1. 아래의 명령어를 입력합니다.
SET GLOBAL event_scheduler = ON; SET @@global.event_scheduler = ON; SET GLOBAL event_scheduler = 1; SET @@global.event_scheduler = 1; |
[실행결과]
[참고]:http://dev.mysql.com/doc/refman/5.1/en/events-configuration.html
3. 이벤트를 등록합니다.
3-1. 이벤트 등록 형식
CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'comment'] DO event_body; schedule: AT timestamp [+ INTERVAL interval] ... | EVERY interval [STARTS timestamp [+ INTERVAL interval] ...] [ENDS timestamp [+ INTERVAL interval] ...] interval: quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND} |
3-2. 예) 한달 간격으로 오늘을 기준으로해서 한달 이후의 데이터를 삭제하는 샘플
CREATE EVENT IF NOT EXISTS 이벤트 이름 ON SCHEDULE EVERY 1 MONTH STARTS CURRENT_TIMESTAMP DO DELETE FROM db명.테이블명 where 시간컬럼명 <= date_sub(curdate(), INTERVAL 1 MONTH); |
※주의: 한글은 임의로 쓴것입니다. 각자 상황에 맞게 바꿔서 쓰시길 바랍니다.
실행은 sql커맨드에서 실행합니다.
예)
mysql>use 데이터베이스명 Database changed mysql>CREATE EVENT IF NOT EXISTS 이벤트 이름 ON SCHEDULE EVERY 1 MONTH STARTS CURRENT_TIMESTAMP DO DELETE FROM db명.테이블명 where 시간컬럼명 <= date_sub(curdate(), INTERVAL 1 MONTH); |
[참고]http://dev.mysql.com/doc/refman/5.1/en/create-event.html
자세한 내용은 참고 사이트에 가보시면 설명이 되어있습니다.
사이트를 참고하세요.
감사합니다.