본문 바로가기
IT

MariaDB 이벤트 스케쥴 생성

by Wiblee 2025. 1. 31.

Dynamic SQL로 테이블 이름을 동적으로 바꿔서 쿼리하고 서드파티 애플리케이션으로 연동할 일이 생겼다. EXECUTE IMMEDIATE 문으로 테이블 이름을 동적으로 바꿔서 SELECT하는 쿼리를 짜고 서드파티 쪽에서 확인해 보았는데, 데이터는 불러와지는데 무언가 후처리가 제대로 안 되는 모양이었다.

 
EXECUTE IMMEDIATE는 쿼리문을 문자열로 조각조각 만들고, 중간에 바꿀 변수를 삽입해서 CONCAT으로 붙여넣는 방식이다. 내 경우는 테이블 이름에 날짜형식이 들어가는 경우여서 중간에 DATE_FORMAT 함수를 넣었다.
 
EXECUTE IMMEDIATE CONCAT(
"SELECT * FROM TABLE_",
DATE_FORMAT(NOW(), '%Y%m'),
";"
);
 
정적인 SELECT 문을 제공해야 하는 상황이어서 여러 가지 방법을 고민해보다가 차라리 스케쥴러에 동적으로 CREATE VIEW 하는 걸 등록해보자 싶었다. 어차피 한 달에 한 번만 하면 될 것 같다.
 
우선, MariaDB는 default로 이벤트 스케쥴러가 꺼져 있어 켜야 한다.
 
# mysql 

> show global variables like 'event_scheduler'; 
> set global event_scheduler=on; 
>show global variables like 'event_scheduler';
 
지난 번에 다른 글에서도 언급했지만 myslq 콘솔에서 입력한 것은 DB가 재기동되면 초기화된다. 따라서 영구적으로 적용하려면 my.cnf에 다음과 같이 설정을 추가한다.
 
# vi my.cnf 

[mysqld]
...
event_scheduler=on
...
 
그 후 다른 Table이나 View처럼 똑같이 EVENT를 만들면 된다.
 
PRE_EVENT_CREATE 
CREATE OR REPLACE EVENT EV_TEST 
	ON SCHEDULE 
		EVERY '1' MONTH 
		STARTS '2023-06-21 00:00:00' 
	DO 
		EXECUTE IMMEDIATE CONCAT( ..... ); 
 
등록된 이벤트는 아래처럼 조회한다.
 
SHOW EVENTS;

댓글