1. MySQL Event 및 Event Scheduler
ㅇ Event (이벤트) 이란?
- 데이터베이스 내부에서 특정 시각(1회성) 또는 일정 주기(반복) 마다,
. 자동으로 SQL 문을 실행하도록 정의한 객체
- 특징
. 운영체제의 cron 과 유사한 기능을, DBMS 내부에서 제공하는 자동 실행 메커니즘
. 이벤트는, SQL문 직접 실행 또는 저장 프로시저 호출 형태로 실행될 수 있음
- 용도 : 통계 집계, 주기적 데이터 정리, 로그 삭제, 상태 갱신, 배치성 DB 작업 자동화 등
ㅇ Event Scheduler 이란?
- 등록된 이벤트를 실제로 실행하는 DBMS 내부의 백그라운드 스레드
. 만일, 이벤트 스케줄러가 비활성화(OFF) 되어 있으면,
. 이벤트 정의가 존재하더라도, 이벤트는 실행되지 않음
2. MySQL Event 및 Event Scheduler 실행 점검
ㅇ 이벤트 스케줄러 가동 여부 확인 : SHOW VARIABLES LIKE 'event_scheduler';
- 결과 값 : (ON : 가동 중), (OFF : 비 가동), (DISABLED : 서버 설정상 사용 불가)
ㅇ 서버 기동 시 이벤트 스케줄러 자동 가동 설정
- (my.ini 또는 my.cnf 파일 내) : [mysqld] event_scheduler = ON
. DB 서버 기동 시 : 이벤트 스케줄러 스레드가 자동으로 생성됨
. 해당 설정이 없다면, : 수동으로 ON 하더라도, 서버 재기동 후에 다시 OFF 상태로 원위치됨
ㅇ 시스템 변수에 의한 이벤트 스케줄러 제어 : SET GLOBAL event_scheduler = ON;
- 영구 적용을 위해서는 설정 파일 (my.ini 또는 my.cnf 파일 내) 수정 필요
ㅇ 현재 등록된 이벤트 확인 : SHOW EVENTS;
- 주요 확인 항목 : 이벤트명, 상태 (ENABLED / DISABLED), 이벤트 유형, 실행 주기 또는 시각
ㅇ 이벤트 실행 이력 확인 : INFORMATION_SCHEMA.EVENTS 테이블 내 LAST_EXECUTED 칼럼
- (SELECT EVENT_NAME,STATUS,LAST_EXECUTED FROM information_schema.EVENTS;)
. LAST_EXECUTED : 이벤트가 마지막으로 실행된 시각으로,
.. 반복 이벤트의 정상 동작 여부 판단에 활용됨
ㅇ 이벤트 생성 例)
DROP EVENT IF EXISTS periodic_stat;
CREATE EVENT 이벤트명
ON SCHEDULE
EVERY 30 MINUTE -- 매 30분 마다
-- 1회 만 실행의 경우에는,
-- EVERY 절 대신에. => AT 절을 사용 함
STARTS CURRENT_TIMESTAMP -- 현재 시각(CURRENT_TIMESTAMP)부터 시작 함
-- 또는, SRART '2018-05-15 00:00:00' END '2018-05-15 02:00:00' 처럼
-- 직접적으로 시작 끝의 시각을 명시하는 것도 가능
-- 또는, STARTS '2019-04-08 19:30:00' ENABLE 처럼
-- 시작 시각을 명시하고 그 시각부터 주기적으로 시행하는 것도 가능
DO
CALL 함수명(); -- 별도수행 함수에 의한 호출 실행
-- 단지 1개 쿼리문 또는 별도 프로시저 실행
-- 또는 BEGIN ~ END에 의한 복합절도 가능
※ [참고] Event 관련 실행 권한 : (DEFINER)
- 이벤트, 프로시저, 함수 등은, DEFINER로 지정된 계정의 권한으로 실행됨
. 즉, 이벤트, 프로시저, 함수 등 DB 객체는, DEFINER로 지정된 계정의 권한을 기준으로 실행됨
- DEFINER는, 객체 생성 시 함께 지정되며, 실행 시점에는 호출 사용자와 무관하게,
. DEFINER 계정의 권한이 적용됨
- DEFINER 형식 : 사용자명@호스트명
* 만일, DEFINER 계정이 존재 않거나, 권한이 제한된 경우에, 해당 객체의 실행이 제한됨