기초공부 - (9) event

2024. 3. 18. 23:23MySQL/Class

반응형

# MySQL의 event는 Oracle의 job이라고 보면 됩니다. 즉, DB 내에서의 스케쥴러 입니다.

오늘 event 에 대해서 등록하고 간단하게 확인 하는 방법을 다뤄보도록 하겠습니다.

 

1. 스케쥴러 설정

SQL> show variables where variable_name = 'event_scheduler';
SQL> show variables like 'event%';

 

# 설정
set global event_scheduler=on;

 

2. 프로시저 생성

 - 여기 10건 입력하는 프로시져가 있습니다. 이 프로시져를 event에 등록하여 자동 처리가 되는지 확인을 해보겠습니다.

mysql> delimiter $$
mysql> drop procedure if exists test.imp_tmp_event $$
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> create procedure test.imp_tmp_event()
    -> begin
    ->     declare i int default 1;
    ->     while i <= 10 do
    ->          insert into test.temp_event values(i, concat("event",i));
    ->          set i = i + 1;
    ->     end while;
    -> end $$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

프로시저가 정상적으로 실행이 된다.

 

3. 등록 

 - 1분마다 실행되도록 등록하였습니다.

mysql> create event test.event_1 on schedule every 1 minute do call test.imp_tmp_event;
Query OK, 0 rows affected (0.01 sec)

 

- 돌릴 시점 지정

mysql> create event test.event_1 on schedule every 1 minute
    -> starts '2024-03-18 16:00:00' # 해당 시간대부터 스케쥴러를 돌린다.
    -> DO
    -> call test.imp_tmp_event();
Query OK, 0 rows affected (0.00 sec)

 

4. 확인

등록된 이미지

- Execute at : 특정 시간대에 1회성으로 돌릴경우 기입.
- LAST_EXECUTED : 마지막 실행 시간

- Status : ENABLE, DISABLE, SLAVESIDE_DISABLE

# SLAVESIDE_DISABLED : 마스터에서 event가 등록되었을 때 슬레이브에도 동일하게 생성이 됩니다. 그래서 마스터와 슬레이브에서 동시에 작업이 이뤄질수있는 문제가 발생될 수 있지만, event 등록시 자동으로 slave의 status에는 SLAVESIDE_DISABLED 값으로 설정되어 slave에서는 처리가 되지 않게 해줍니다.

slave에 등록된 event의 status값이다.

 

5. 이벤트 비활성화

mysql> alter event test.event_1 disable;
# master에서 slave에 일괄적으로 disable 시키는 명령어 입니다.
mysql> alter event test.event_1 disable on slave;

 

6. 이벤트 삭제

mysql> drop event test.event_1;

 

7. failover

- failover 발생시 event는 설정된 서버 그대로 유지가 됩니다. 즉, slave 에서 master 서버로 되었다고 하여도 event의 status값은 그대로 입니다. slave 가 된 서버에서는 계속 작동을 하여 데이터 싱크에 있어 문제가 될 수 있습니다.

반응형