이번에는 MySQL에서 이벤트 스케줄링 하는 방법에 대해 작성하고자 합니다.
MySQL 이벤트 스케줄링 요약
MySQL 이벤트 스케줄링은 데이터베이스의 특정 작업을 일정 간격으로 자동으로 실행할 수 있는 기능이다.
해당 기능을 사용할 수 있는 일반적인 경우는 아래와 같다.
- 백업
- 통계 수집
- 데이터 정리
- 데이터 마이그레이션
- 자동화
MySQL 예제를 통한 EVENT Scheduler 활용법
1단계: Event Scheduler 활성화하기
이벤트 스케줄러는 MySQL 서버에 기본적으로 내장된 구성 요소로서, 이벤트를 실행하는 데 사용됩니다. 다음 명령어로 이벤트 스케줄러를 활성화 할 수 있다.
SET GLOBAL event_scheduler = ON;
2단계: Event 생성
다음은 매일 밤 12시에 'old_data' 테이블에서 30일 이전의 데이터를 삭제하는 이벤트를 생성하는 예:
CREATE EVENT [IF NOT EXISTS] 이벤트명
ON SCHEDULE 스케줄
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT '주석']
DO [BEGIN] 실행할 sql문; [실행할 sql문]; [END]
3단계: 이벤트 확인
다음 SQL 명령을 사용하여 현재 데이터베이스의 모든 이벤트를 확인할 수 있다
SELECT * FROM information_schema.EVENTS;
• 출력되는 컬럼 중 LAST_EXECUTED 는 마지막 이벤트가 실행된 시간
4단계: 이벤트 수정
이벤트를 수정하려면 'ALTER EVENT' 명령을 사용한다.
예를 들어, 생성한 이벤트를 매일 아침 1시에 실행되도록 변경 가능할 수 있다.
ALTER EVENT [이벤트명]
ON SCHEDULE EVERY 1 DAY
STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR);
5단계: 이벤트 삭제
이벤트를 삭제하려면 'DROP EVENT' 명령을 사용한다.
DROP EVENT IF EXISTS [이벤트명];
MySQL 이벤트 스케줄링 사용 예제
예제 1: 데이터베이스 백업
다음은 데이터베이스의 모든 테이블을 매일 오전 2시에 백업하는 이벤트를 생성하는 예제이다.
CREATE EVENT `backup` ON SCHEDULE EVERY 1 DAY STARTS '2023-11-23 02:00:00'
DO
BEGIN
CALL backup_events();
END;
이 이벤트는 backup_events()라는 저장 프로시저를 호출하여 데이터베이스를 백업한다.
backup_events()프로시저는 아래와 같이 작성할 수 있다.
CREATE PROCEDURE `backup_events()`
BEGIN
-- 데이터베이스 백업을 수행하는 코드
END;
이 이벤트를 생성하면, MySQL 서버는 매일 오전 2시에 backup_events() 프로시저를 호출하여 데이터베이스를 백업한다.
예제 2: 데이터 통계 수집
다음은 데이터베이스의 user 테이블에서 매일 오전 3시에 통계를 수집하는 이벤트를 생성하는 예제이다.
CREATE EVENT `statistics` ON SCHEDULE EVERY 1 DAY STARTS '2023-11-23 03:00:00'
DO
BEGIN
SELECT COUNT(*) AS count, SUM(age) AS age_sum
FROM user;
END;
이 이벤트는 user 테이블에서 count() 함수와 sum() 함수를 사용하여 다음과 같은 통계를 수집한다.
- count() 함수: user 테이블의 레코드 수
- sum() 함수: user 테이블의 모든 사용자의 나이의 합
이 이벤트를 생성하면, MySQL 서버는 매일 오전 3시에 user 테이블의 통계를 수집하여 출력한다.
해당 예제 이외에 아래와 같은 작업을 MySQL 이벤트 스케줄링을 통해 데이터베이스의 유지보수와 관리를 자동화하는 데 다양한 방법으로 사용할 수 있다.
- 오래된 데이터를 삭제
- 데이터 이동
- 데이터 복제
- 이메일 또는 문자 메시지를 보내기
- 웹 서비스 호출
MySQL 이벤트 스케줄링을 사용한다면 데이터베이스를 효율적으로 관리하고 유지보수 할 수 있다.
참고자료
'Data Engineering > DBMS' 카테고리의 다른 글
[PostgreSQL] Database Partitioning (0) | 2023.08.23 |
---|---|
[DB 기초] 트랜잭션(Transaction)과 그 특성은 무엇인가 (0) | 2023.08.19 |
[DBMS] Data structure store Redis (0) | 2023.07.27 |
[PostgreSQL] 사용자에게 권한 부여하기 (0) | 2023.07.13 |
[PostgreSQL] Primary Key 재설정 (0) | 2023.07.04 |