데이터를 주기적으로 삭제 하는 방법을 찾아 보다가 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; 


[실행결과]

image1.png


[참고]: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


자세한 내용은 참고 사이트에 가보시면 설명이 되어있습니다.

사이트를 참고하세요.


감사합니다.