DB

[MySQL] CREATE EVENT 완벽 가이드 사용법(스케줄링)

인생아 2025. 1. 8. 15:45
반응형

MySQL CREATE EVENT는 특정 시간이나 주기에 따라 자동으로 실행되는 작업을 정의할 수 있는 강력한 기능입니다. 이를 통해 정기적으로 데이터베이스 작업(예: 백업, 데이터 정리, 로그 아카이브 등)을 수행할 수 있습니다. 특히 CRON과 같은 외부 도구 없이 데이터베이스 자체에서 스케줄링이 가능하다는 점에서 매우 유용합니다.

CREATE EVENT의 주요 기능

  1. 자동화된 작업 처리
    데이터베이스에서 정해진 시간에 작업이 자동으로 실행되도록 설정할 수 있습니다.
  2. 반복 실행 가능
    특정 시간 간격으로 반복적으로 실행되는 작업을 설정할 수 있습니다.
  3. 유연한 스케줄링
    실행 주기를 초, 분, 시간, 일, 주, 월 단위로 자유롭게 지정할 수 있습니다.
  4. 서버 기반 스케줄링
    데이터베이스 서버에서 직접 관리되므로 외부 도구가 필요하지 않습니다.

CREATE EVENT 활성화 설정
MySQL에서 EVENT 기능을 사용하려면 event_scheduler 시스템 변수가 활성화되어 있어야 합니다.
활성화 방법:

SET GLOBAL event_scheduler = ON;

또는 MySQL 설정 파일(my.cnf)에서 다음과 같이 설정할 수도 있습니다:

[mysqld]
event_scheduler = ON
반응형

CREATE EVENT 문법

CREATE EVENT [IF NOT EXISTS] 이벤트명
ON SCHEDULE 일정
DO 작업;
  • 이벤트명: 생성할 이벤트의 이름.
  • ON SCHEDULE: 이벤트의 실행 주기와 시작 시간을 정의.
  • DO: 실행할 SQL 작업.

예제 1: 데이터 정리 이벤트 생성하기
다음은 오래된 데이터를 정기적으로 삭제하는 이벤트를 생성하는 예제입니다:

CREATE EVENT delete_old_logs
ON SCHEDULE EVERY 1 DAY
STARTS CURRENT_TIMESTAMP
DO
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;

이 코드는 매일 한 번 실행되어 30일 이상 지난 로그를 삭제합니다.

예제 2: 특정 시간에 한 번만 실행되는 이벤트

CREATE EVENT update_status
ON SCHEDULE AT '2025-01-08 00:00:00'
DO
UPDATE orders SET status = 'completed' WHERE delivery_date <= '2025-01-07';

이 이벤트는 2025년 1월 8일 자정에 한 번 실행되어 특정 조건의 주문 상태를 업데이트합니다.

반응형

예제 3: 매달 정기적으로 실행되는 이벤트

CREATE EVENT monthly_sales_summary
ON SCHEDULE EVERY 1 MONTH
STARTS '2025-01-01 00:00:00'
DO
INSERT INTO sales_summary (month, total_sales)
SELECT DATE_FORMAT(NOW(), '%Y-%m'), SUM(amount)
FROM sales;

위 코드는 매월 1일 00:00에 실행되어 월간 판매 요약 정보를 저장합니다.

이벤트의 관리와 모니터링

1. SHOW EVENTS
데이터베이스에 생성된 이벤트 목록을 확인하려면:

SHOW EVENTS;

2. 이벤트 수정
기존 이벤트를 수정하려면 ALTER EVENT 명령어를 사용합니다:이 코드는 이벤트의 주기를 매 2일로 변경합니다.

ALTER EVENT delete_old_logs
ON SCHEDULE EVERY 2 DAY;

3. 이벤트 삭제
더 이상 필요하지 않은 이벤트를 삭제하려면 DROP EVENT를 사용합니다:

DROP EVENT IF EXISTS delete_old_logs;
반응형

주의사항과 팁

  • 권한: 이벤트 생성에는 EVENT 권한이 필요합니다.
  • 서버 시간대: 이벤트 실행 시간은 MySQL 서버의 시간대를 기준으로 설정됩니다.
  • 리소스 관리: 너무 빈번한 실행 간격은 서버 리소스를 과도하게 사용하므로 주의해야 합니다.

CREATE EVENT의 활용 사례

1. 데이터 백업 자동화
데이터베이스를 정기적으로 백업하는 스케줄 설정.

CREATE EVENT backup_database
ON SCHEDULE EVERY 1 WEEK
DO
BACKUP DATABASE my_database TO DISK = '/backups/my_database.sql';

2. 로그 아카이브
오래된 로그를 별도의 테이블로 이동하여 정리.

CREATE EVENT archive_logs
ON SCHEDULE EVERY 1 MONTH
DO
INSERT INTO archive_logs SELECT * FROM logs WHERE created_at < NOW() - INTERVAL 1 YEAR;

3. 리소스 관리
테이블 최적화 작업을 주기적으로 수행하여 성능 개선.

CREATE EVENT optimize_tables
ON SCHEDULE EVERY 1 WEEK
DO
OPTIMIZE TABLE my_table;

공식 가이드 문서
MySQL CREATE EVENT에 대한 공식 문서: https://dev.mysql.com/doc/refman/8.0/en/create-event.html

반응형