설명에 사용한 MySQL 버전 : 5.7.20
1. Scheduler 확인
show global variables like '%schedule%';
사용 가능할 경우 ON, 그렇지 않을 경우 OFF 로 표시 됩니다.
1-1. Scheduler 사용 설정
ini를 수정하게 되면 MySQL 을 재시작 해주어야 합니다. 그렇지 않을 경우 ini 수정 후 set global 명령어를 통해서
수동으로 설정을 변경해 주시면 됩니다. 추후 재시작 하게되면 그때부터는 ini의 설정에 따라서 동작 하게 됩니다.
ini 에 아래 구문을 추가합니다.
event_scheduler = 1
혹은
event_scheduler = ON
"1" 이나 "ON" 이나 동일하게 동작(설정) 됩니다.
1-2. Process 확인
show processlist;
Scheduler 설정을 정상적으로 완료하였을 경우 아래와 같이 event_scheduler 데몬이 접속 중임이 확인 됩니다.
2. Schedule 생성
◈ Schedule 은 DB에 종속되기에 명령을 실행할 DB가 선택된 상태에서 생성해야 합니다.
DROP EVENT IF EXISTS `calc_ranking`;
DELIMITER $
CREATE EVENT IF NOT EXISTS `calc_ranking`
ON SCHEDULE
EVERY 5 HOUR -- 5시간 마다 실행 (사용 가능 형식: second, minute, day)
STARTS '2020-01-01 00:00:00' -- 지정하지 않을 경우 현재 시간부터 5시간 경과 후에 첫 스케줄러가 동작됨
ON COMPLETION PRESERVE
ENABLE
COMMENT 'calc_profile_ranking'
DO
BEGIN
call test_procedure(1);
UPDATE tbl_test set action_status = 1;
END$
DELIMITER ;
- 매일 5시에 실행되는 작업을 만들고 싶을 경우 ON SCHEDULE 부분을 아래와 같이 수정 합니다.
ON SCHEDULE
EVERY 1 DAY -- 하루에 한번
STARTS '2020-01-01 05:00:00' -- 기준 시각이 05시 이기 때문에 매일 5시에 스케줄러 실행
- 특정 문서의 경우 매일 특정 시간에 실행되는 스케줄을 등록하기 위해 아래와 같은 구문을 사용하는데
그럴 필요 없이 과거 날짜의 특정 시간을 시작시간으로 설정하면 해당 시간 을 기준으로 하루에 한번 실행 됩니다.
STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR)
3. Schedule 확인
◈ Schedule 은 DB에 종속되기에 명령을 실행할 DB가 먼저 선택되어 있어야 합니다.
SHOW EVENTS; -- 현재 선택된 DB에 등록된 Schedule을 조회 합니다.
or
SELECT * FROM information_schema.EVENTS; -- 모든 DB에 등록된 설정을 조회 합니다.
- Schedule 등록 스크립트를 확인하실 수 있습니다.
SHOW CREATE EVENT `Schedule Name`;
SHOW CREATE EVENT `calc_ranking`;
- Create Event 컬럼의 내용은 아래와 같습니다.
CREATE DEFINER=`root`@`%` EVENT `calc_ranking`
ON SCHEDULE EVERY 5 HOUR STARTS '2020-01-01 00:00:00'
ON COMPLETION PRESERVE ENABLE COMMENT 'calc_profile_ranking'
DO BEGIN
call test_procedure(1);
UPDATE tbl_test set action_status = 1;
END
4. 삭제
DROP event `이벤트명`;
DROP EVENT `calc_ranking`;
이상 입니다.
'Database & Data > MYSQL' 카테고리의 다른 글
[MySQL] str_to_date 함수 설명(오류 내용) (0) | 2022.07.04 |
---|---|
Window PC에 동일 버전 MySQL(MariaDB) 2개(다수)설치 방법 (0) | 2021.01.03 |
MySQL 대량 ROW 조회 결과 파일 저장 및 불러오기 (0) | 2020.08.26 |
MySQL DB-Link 구현을 위한 FEDERATED 엔진 활성화 및 테이블 생성 (2) | 2020.08.14 |
MySQL / MariaDB Slow Query Log 활성화 및 로그를 테이블에 기록 (0) | 2020.07.07 |