테이블 백업을 수행하는 프로시저를 생성해보려고 한다.
기존 테이블(직원, 휴가, 휴가기록)에서 백업 테이블을 새로 생성하는 프로시저를 만든다.
프로시저를 생성하고 이벤트 스케쥴(event schedule)까지 걸어보겠다.
1. MySQL 프로시저 생성하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | DELIMITER $$ DROP PROCEDURE IF EXISTS backup_proc; CREATE PROCEDURE backup_proc() BEGIN DROP TABLE IF EXISTS BACKUP_EMP; CREATE TABLE BACKUP_EMP SELECT * FROM EMP_EMPLOYEE; DROP TABLE IF EXISTS BACKUP_VAC; CREATE TABLE BACKUP_VAC SELECT * FROM VAC_VACATION; DROP TABLE IF EXISTS BACKUP_VAC_HIS; CREATE TABLE BACKUP_VAC_HIS SELECT * FROM VAC_HISTORY; SELECT '테이블 백업 성공'; END $$ DELIMITER ; | cs |
백업테이블이 존재한다면 드랍하고 다시 생성할 것이고
없다면 백업테이블을 기존테이블에서 새로 생성한다는 간단한 쿼리이다.
프로시저를 저장했다면 프로시저를 호출해보자.
2. 프로시저 호출하기
1 | CALL backup_proc(); | cs |
프로시저가 성공적으로 실행됐다면 select 구문에서 설정한 '테이블 백업 성공' 이라는 결과값이 나오고
BACKUP 테이블이 3개 생성된 것을 확인 할 수 있다.
3. 이벤트 스케쥴러 사용하기
매번 프로시저를 call해서 backup 테이블을 만들수는 없는 것이다.
이벤트 스케쥴러에 등록하여 DAY, MONTH, TIME 별로 시간을 지정해 준다면 자동으로 이벤트가 실행될 것이다.
- 이벤트 스케쥴러 ON
1 2 | SHOW VARIABLES LIKE 'event%'; SET GLOBAL event_scheduler = ON ; | cs |
- 이벤트 만들기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -- 매일 반복해서 실행 CREATE EVENT everyDayEvent1 ON SCHEDULE EVERY 1 DAY STARTS '2019-07-30 00:00:00' DO CALL backup_proc(); -- 1달마다 반복해서 실행 CREATE EVENT everyMonthEvent1 ON SCHEDULE EVERY 1 MONTH STARTS '2019-07-30 00:00:00' DO CALL backup_proc(); -- 1년마다 반복해서 실행 CREATE EVENT everyYearEvent1 ON SCHEDULE EVERY 1 YEAR STARTS '2019-01-01 00:00:00' DO CALL backup_proc(); | cs |
이벤트를 만들고 스케쥴을 걸어 프로시저를 실행하는 구문이다.
이벤트를 생성하면 현재 등록된 이벤트의 목록을 확인해야 한다.
- 등록된 이벤트 조회하기
1 | SELECT * FROM information_schema.`EVENTS` ; | cs |
- 이벤트 삭제하기
1 2 3 | DROP EVENT IF EXISTS everyDayEvent1; DROP EVENT IF EXISTS everyMonthEvent1; DROP EVENT IF EXISTS everyYearEvent1; | cs |
백업 테이블명에 백업날짜를 붙여만들거나
백업 테이블명을 각각 다르게하여 각각 스케쥴링을 걸어놓아
백업을 정기적으로 할 수 있을 것 같다.
'전체 > MySQL' 카테고리의 다른 글
MySQL 프로시저 loop, fetch, cursor 사용하기 (1) | 2019.07.30 |
---|---|
select return (0 row 0 total rows) null 결과 출력처리방법 (0) | 2019.07.19 |
MySQL function 만들기 (3) | 2019.07.17 |
MySQL 계층형 쿼리 구현하기 (13) | 2019.07.16 |
SQL EXPLAIN 정리 (0) | 2018.11.19 |