MySQL CREATE EVENT는 특정 시간이나 주기에 따라 자동으로 실행되는 작업을 정의할 수 있는 강력한 기능입니다. 이를 통해 정기적으로 데이터베이스 작업(예: 백업, 데이터 정리, 로그 아카이브 등)을 수행할 수 있습니다. 특히 CRON과 같은 외부 도구 없이 데이터베이스 자체에서 스케줄링이 가능하다는 점에서 매우 유용합니다.
CREATE EVENT의 주요 기능
- 자동화된 작업 처리
데이터베이스에서 정해진 시간에 작업이 자동으로 실행되도록 설정할 수 있습니다. - 반복 실행 가능
특정 시간 간격으로 반복적으로 실행되는 작업을 설정할 수 있습니다. - 유연한 스케줄링
실행 주기를 초, 분, 시간, 일, 주, 월 단위로 자유롭게 지정할 수 있습니다. - 서버 기반 스케줄링
데이터베이스 서버에서 직접 관리되므로 외부 도구가 필요하지 않습니다.
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
'DB' 카테고리의 다른 글
[MySQL] DROP FUNCTION 완벽 가이드 사용법(함수 삭제) (0) | 2025.01.08 |
---|---|
[MySQL] CREATE FUNCTION 완벽 가이드 사용법(함수 생성) (0) | 2025.01.08 |
[MySQL] DROP EVENT 완벽 가이드 사용법(이벤트 삭제) (0) | 2025.01.08 |
[MySQL] ALTER EVENT 완벽 가이드 사용법(이벤트수정) (0) | 2025.01.08 |
[MySQL] REVOKE 완벽 가이드 사용법(권한 제거) (0) | 2025.01.08 |
[MySQL] GRANT 완벽 가이드 사용법(권한 부여) (0) | 2025.01.08 |
[MySQL] SHOW CREATE 완벽 가이드 사용법(객체 생성 스크립트 보기) (0) | 2025.01.08 |
[MySQL] SET FOREIGN_KEY_CHECKS 완벽 가이드 사용법(외래 키 제약 조건 활성/비활성) (0) | 2025.01.08 |