📖
MySQL 이벤트 스케줄러를 이용해 매일 자동으로 테이블을 날짜별로 백업하는 방법

페이지 정보

본문

1️⃣ 이벤트 스케줄러 활성화 확인[code]-- 현재 이벤트 스케줄러 상태 확인
SHOW VARIABLES LIKE 'event_scheduler';

-- 활성화 되어 있지 않으면
SET GLOBAL event_scheduler = ON;[/code]⚠️ MySQL 재시작 시 자동 활성화를 원하면 my.cnf에 event_scheduler=ON 추가

2️⃣ 백업 이벤트 생성[code]DELIMITER $$

CREATE EVENT IF NOT EXISTS backup_g5_write_test_daily
ON SCHEDULE EVERY 1 DAY
STARTS CONCAT(CURRENT_DATE + INTERVAL 1 DAY, ' 00:05:00') -- 매일 00:05에 실행
DO
BEGIN
    DECLARE backup_table_name VARCHAR(64);

    -- 백업 테이블 이름 설정 (YYYYMMDD)
    SET backup_table_name = CONCAT('g5_write_test_', DATE_FORMAT(NOW(), '%Y%m%d'));

    -- 기존 테이블 삭제 (같은 날짜가 있으면)
    SET @drop_sql = CONCAT('DROP TABLE IF EXISTS ', backup_table_name);
    PREPARE stmt_drop FROM @drop_sql;
    EXECUTE stmt_drop;
    DEALLOCATE PREPARE stmt_drop;

    -- 구조 복사
    SET @create_sql = CONCAT('CREATE TABLE ', backup_table_name, ' LIKE g5_write_test');
    PREPARE stmt_create FROM @create_sql;
    EXECUTE stmt_create;
    DEALLOCATE PREPARE stmt_create;

    -- 데이터 복사
    SET @insert_sql = CONCAT('INSERT INTO ', backup_table_name, ' SELECT * FROM g5_write_test');
    PREPARE stmt_insert FROM @insert_sql;
    EXECUTE stmt_insert;
    DEALLOCATE PREPARE stmt_insert;
END$$

DELIMITER ;[/code]
3️⃣ 이벤트 확인[code]SHOW EVENTS\G[/code]backup_g5_write_test_daily 이벤트가 매일 00:05에 실행되도록 등록됨
백업 테이블은 g5_write_test_YYYYMMDD 형태로 생성

💡 팁:
이벤트 시간을 변경하고 싶으면 STARTS 구문을 원하는 시간으로 수정
주간 또는 월간 백업도 EVERY 7 DAY / EVERY 1 MONTH로 쉽게 조정 가능

🕛 매일 한 번 백업하고, 5일 이상 된 백업 테이블은 자동 삭제하도록 MySQL 이벤트를 작성할 수 있습니다.
백업 테이블 이름은 날짜 기준으로 g5_write_test_YYYYMMDD 형태입니다.[code]DELIMITER $$

CREATE EVENT IF NOT EXISTS backup_g5_write_test_daily
ON SCHEDULE EVERY 1 DAY
STARTS CONCAT(CURRENT_DATE + INTERVAL 1 DAY, ' 00:05:00')  -- 매일 00:05에 실행
DO
BEGIN
    DECLARE backup_table_name VARCHAR(64);
    DECLARE old_backup_date DATE;

    -- 오늘 날짜 기준 백업 테이블 이름
    SET backup_table_name = CONCAT('g5_write_test_', DATE_FORMAT(NOW(), '%Y%m%d'));

    -- 기존 오늘 날짜 테이블이 있으면 삭제
    SET @drop_sql = CONCAT('DROP TABLE IF EXISTS ', backup_table_name);
    PREPARE stmt_drop FROM @drop_sql;
    EXECUTE stmt_drop;
    DEALLOCATE PREPARE stmt_drop;

    -- 테이블 구조 복사
    SET @create_sql = CONCAT('CREATE TABLE ', backup_table_name, ' LIKE g5_write_test');
    PREPARE stmt_create FROM @create_sql;
    EXECUTE stmt_create;
    DEALLOCATE PREPARE stmt_create;

    -- 데이터 복사
    SET @insert_sql = CONCAT('INSERT INTO ', backup_table_name, ' SELECT * FROM g5_write_test');
    PREPARE stmt_insert FROM @insert_sql;
    EXECUTE stmt_insert;
    DEALLOCATE PREPARE stmt_insert;

    -- 5일 이상 된 백업 테이블 자동 삭제
    SET @old_backup_date = DATE_FORMAT(NOW() - INTERVAL 5 DAY, '%Y%m%d');
    SET @drop_old_sql = CONCAT('DROP TABLE IF EXISTS g5_write_test_', @old_backup_date);
    PREPARE stmt_drop_old FROM @drop_old_sql;
    EXECUTE stmt_drop_old;
    DEALLOCATE PREPARE stmt_drop_old;
END$$

DELIMITER ;[/code]
🔹 특징
1. 매일 00:05 자동 백업
2. 백업 테이블 이름: g5_write_test_YYYYMMDD
3. 5일 이상 된 백업 테이블 자동 삭제 → 디스크 누적 방지
4. 구조 + 데이터 모두 백업

댓글목록

등록된 댓글이 없습니다.

🔍 검색

회사소개 개인정보처리방침 서비스이용약관
Copyright © rainbowgarden.shop All rights reserved.