📖
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. 구조 + 데이터 모두 백업
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. 구조 + 데이터 모두 백업
댓글목록
등록된 댓글이 없습니다.
![]() ![]() |