Recent Posts
Recent Comments
Link
11-17 00:00
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

MySQL 이벤트 스케줄러 본문

DEV&OPS/Database

MySQL 이벤트 스케줄러

ALEPH.GEM 2021. 8. 24. 20:56

MySQL Event Scheduler

MySQL 5.1 부터 자바의 Quartz나 리눅스의 Crontab 처럼 이벤트 스케줄러를 통해 배치작업을 할 수 있게 되었습니다.

아래의 작업들은 콘솔에서 root 계정으로 접속하여 작업하는 것을 추천드립니다.

mysql -u root -p

이벤트 스케줄러 상태 확인

SHOW VARIABLES LIKE 'event%';

이벤트 스케줄러 ON/OFF

SET GLOBAL event_scheduler = ON;
SET GLOBAL event_scheduler = OFF;

만약 event_schedule 변경중에 에러코드 1227 이 나오는 경우 mysql을 root 권한으로 접속 후 다음을 실행하십시오.

UPDATE mysql.user set Super_Priv='Y' where user = '유저계정이름';
flush privileges;

서버 재시작시 이벤트 활성화가 되지 않는 경우

sudo vi /etc/my.cnf

만약 my.cnf 파일이 해당 경로에 없는 경우 find / -name 'my.cnf' 명령으로 검색합니다.

vi 편집기로 아래의 내용을 [mysqld] 항목 영역 안에 추가한뒤 wq!으로 저장하고 나옵니다.

event_scheduler = ON

그리고 나서 mysql 서비스를 재시작 합니다.

#centos7 인경우
systemctl restart mysqld
#centos6 인경우
service mysqld restart
#우분투인경우
service mysql restart

특정 시간에 1회 실행 이벤트 생성 예제

CREATE EVENT IF NOT EXISTS '이벤트이름'
    ON SCHEDULE
       AT '2021-08-24 12:00:00'
    ON COMPLETION NOT PRESERVE
    ENABLE
    COMMENT '코멘트'
    DO
    수행할 명령어;
    수행할 쿼리;
    ...
END

ON COMPLETION NOT PRESERVE ENABLE 설정은 이벤트를 수행 후 삭제 여부에 관한 설정입니다.

만약, 이벤트를 수행 후 삭제하지 않는다면 NOT을 제거 합니다.

하루에 한번 반복하는 이벤트 생성 예제

CREATE EVENT IF NOT EXISTS '이벤트이름'
    ON SCHEDULE
       EVERY 1 DAY
    ON COMPLETION PRESERVE
    ENABLE
    COMMENT '코멘트'
    DO
    수행할 명령어들...
END

시작일과 시작시간 종료일과 종료시간 지정해서 하루 한 번 반복하는 이벤트 생성 예제

CREATE EVENT IF NOT EXISTS '이벤트이름'
    ON SCHEDULE
       EVERY 1 DAY STARTS '2021-08-24 12:00:00' ENDS '2022-08-24 12:00:00'
    ON COMPLETION PRESERVE
    ENABLE
    DO
    수행할 명령어들...
END

여기서 종료일 즉, ENDS 부분은 생략가능합니다.

매달 오후 12시에 1번 수행하도록 이벤트 수정 예제

ALTER EVENT '이벤트이름'
      ON SCHEDULE
      EVERY 1 MONTHS STARTS '2021-08-01 12:00:00'
      DO
      실행할쿼리들

이벤트 스케줄러 확인 쿼리

SELECT * FROM information_schema.events;
or
SHOW EVENTS;

프로세스 확인

SHOW processlist;

스케줄 삭제

DROP event '이벤트이름';

 

 

 

 

 

 

 

 

728x90