MySQL 예약 쿼리 적용

Donghyun Kim·2024년 10월 16일
0

상황

자사 서비스에서 앱 클라이언트의 버전을 관리하기 위해 특정 테이블에서 버전에 대한 데이터를 등록해주어 관리하고 있는데 팀 내부적으로 서비스 앱이 심사 후 마켓에 등록되면 해당 테이블에 마켓에 갱신된 버전에 맞게 로우 데이터를 추가해주어야한다.

비교적 간단한 작업이지만, 서비스 사용이 활발하지 않은 새벽 또는 이른 오전에 진행되므로 해당 로우 데이터를 하나 추가하자고 이른 시간에 일어나 사람이 직접 데이터를 추가하는 작업을 해야하는 비합리적인 상황(?)이 지속되고 있었다.

따라서 특정 테이블에 데이터를 추가하는 DML 쿼리를 예약하여 실행시킬 수 있는 무언가를 DBMS에서 지원하는지 조사가 필요했다.

  • 현재 적용해야하는 DBMS는 MariaDB 이다.

조사

ChaptGPT와 구글링을 통해 조사해보니

MySQL에서 Event Scheduler라는 기능을 제공한다. (MariaDB 동일)

해당 기능은 특정 테이블의 데이터를 삽입,수정,삭제 등의 DML 쿼리를 예약을 하여 실행시킬 수 있고

특정 기간마다 반복시키거나 1회 실행시키는 등의 interval 옵션 또한 적용할 수 있다.

(참조 링크: https://jungeunpyun.tistory.com/64)

따라서, 위 Event Scheduler를 등록하여 예약 쿼리를 실행 시켜보기로 했다.


적용

Event Scheduler 등록 시 제대로 작동하는지 테스트하기 위하여 개발 DB를 기준으로 테스트 작업을 진행해보기로 했다.

1. 개발 DB에 이벤트 스케줄러가 활성화 되어있는지 확인

SHOW VARIABLES LIKE 'event%';

이벤트 스케줄러가 꺼져있는 상태

2. 이벤트 스케줄러 활성화

SET GLOBAL event_scheduler = ON;

* 해당 권한은 SUPER 권한이 있는 계정으로만 진행이 가능하며 AWS RDS 같은 경우는 admin 계정이라 할지라도 SUPER 권한이 없으므로 AWS RDS 콘솔에서 파라미터 그룹을 통해 권한 설정을 적용해야 한다.

RDS의 DB super 권한 설정 방법

3. 이벤트 스케줄러 생성

예시)

CREATE EVENT insert_data_event
-- 실행 시간은 DB 서버 시간 기준이므로 UTC, KST 시간 설정 필수 확인
ON SCHEDULE AT '2024-10-16 00:00:00'
DO
    INSERT INTO my_table VALUES (
        -- 삽입할 데이터 작성
    );

4. 이벤트 생성 확인

SELECT * FROM information_schema.events;

5. 이벤트 삭제

이벤트 명을 이용해서 이벤트를 삭제할 수 있다.

DROP event my_event
  • 실제 적용한 이벤트는 일회성 이벤트이므로 실행 후 자동으로 삭제가되지만 특정 주기마다 실행되는 이벤트 같은 경우는 아래의 이벤트 삭제 쿼리를 통해 필수적으로 삭제해주어야한다.
profile
"Hello World"

0개의 댓글