Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

IT 개발일지

[MySQL] MySQL Event Scheduler 본문

카테고리 없음

[MySQL] MySQL Event Scheduler

맛난밤송이 2024. 6. 27. 16:17

Event Scheduler

정의

- DB내에서 스케줄링이나, 특정 스케줄에 맞춘 이벤트를 실행할 때 사용한다.

- Unix의 crontab이나 Windows의 Task Scheduler와 비슷하다.

- Trigger과 혼동할 수 있는데, Trigger은 특정 SQL statement가 지정된 테이블의 데이터를 변화시킬 때 자동으로 발현하는 것이고, event는 미리 정해진 시간에 따라 interval하게 진행된다는 차이가 있다.

 

사용하는 이유

1. 주기적, 또는 특정 시간에 작업이 필요한 경우에 자동으로 처리할 수 있다.
- 주기적으로 발생하는 작업을 수작업으로 할 필요없이 자동화할 수 있다.

- 정기적인 데이터 백업

- 시간의 흐름에 따른 데이터 변경

 

2. 실시간 처리 시 DB에 과부하가 걸리는 작업을 스케줄링할 수 있다.
- 통계 등의 Batch 작업

- Ranking Data

 

형식

CREATE
    [DEFINER = user]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    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}

 


Scheduler 생성 전 확인 사항

Event Scheduler 사용 여부 확인

-- Event Scheduler 사용 여부 확인
SHOW VARIABLES LIKE 'event%';

-- 만약 Value가 OFF이면 ON으로 바꿈
SET GLOBAL event_scheduler = ON;

-- 현재 MySQL 내에 저장된 Event Scheduler가 있는지 확인
SHOW EVENTS;
SELECT * FROM information_schema.EVENTS;

 

실습

1. 1분 간격으로 특정 dummy 데이터를 생성하는 Scheduler를 만들기

Event를 위한 Table 생성

CREATE TABLE event_test (
    id INT NOT NULL AUTO_INCREMENT,
    data VARCHAR(10) NOT NULL,
    time DATETIME NOT NULL,
    PRIMARY KEY (id) 
);

 

Event 생성

-- 이벤트 생성
CREATE EVENT test_1sec
	ON  SCHEDULE
		EVERY 1 MINUTE -- 매 분마다
	COMMENT 'Insert Data every 1 minute' -- comment
    DO 
		INSERT INTO event_test (data, time) VALUES ('example1', NOW()); -- 실행항 구문 작성

 

1분마다 데이터가 추가되는 것이 보인다.

 

 

Event 수정

- CREATE 문 대신 ALTER로 바꾸면 된다.

-- ALTER문을 활용해서 바꾸면 된다.
ALTER EVENT test_1sec
	ON  SCHEDULE
		EVERY 2 MINUTE
	COMMENT 'Insert Data every 2 minute'
    DO 
		INSERT INTO event_test (data, time) VALUES ('example1', NOW());

 

 

Event 삭제

- DROP문을 활용하면 된다.

DROP EVENT test_1sec;

 

 

2. 현재 시각으로부터 5분 후 모든 데이터를 삭제하는 Event Scheduler을 만들어보자

 

Table 생성

CREATE TABLE event_test2 (
    id INT NOT NULL AUTO_INCREMENT,
    data VARCHAR(10) NOT NULL,
    PRIMARY KEY (id) 
);

 

Event 생성

- 이때, AT CURRENT_TIMESTAMP, INTERVAL을 활용하여 지금 시간으로부터 5분 뒤에 실행하도록 하고 있다.

-- 이벤트 생성
CREATE EVENT test_delete_after_5_minutes
    ON SCHEDULE
        AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
    COMMENT 'DELETE id = 1 data after 5 minutes'
    DO 
        DELETE FROM event_test_2 WHERE id = 1;

 

 

3. 이벤트 실행 시점으로부터 5분간만 1분에 1개씩 데이터를 추가하도록 하기.

 

Table 생성

CREATE TABLE event_test3 (
    id INT NOT NULL AUTO_INCREMENT,
    data VARCHAR(10) NOT NULL,
    time DATETIME NOT NULL,
    PRIMARY KEY (id) 
);

 

- Event 생성

- STARTS, ENDS 문을 활용하여 언제부터 언제까지만 실행될지 정할 수 있다.

CREATE EVENT test_interval_1min
    ON SCHEDULE
        EVERY 1 MINUTE
        STARTS CURRENT_TIMESTAMP
        ENDS CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
    COMMENT 'Insert Data every 1 minute during 5 minutes'
    DO
        INSERT INTO event_test3 (data, time) VALUES ('example1', NOW());

출처

- MySQL Event Scheduler