Mysql 이벤트 스케줄러 사용하기

  1. 사용가능한 버전 확인

    • mysql 5.16
    • 이 포스트에서 사용하는 버전: MariaDB 10.2.9
  2. 이벤트 스케줄러 사용하도록 설정

    • 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
      
  3. 이벤트 스케줄러 생성
    • 생성문:
        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));
      
  4. 이벤트 스케줄러 등록 확인
     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)


Posted by 감각적신사
,