MySQL 프로시저 생성 (테이블 백업) 및 이벤트 스케쥴러 등록,삭제

2021. 4. 6. 02:05 Database/mysql procedure, function

테이블 백업을 수행하는 프로시저를 생성해보려고 한다.

기존 테이블(직원, 휴가, 휴가기록)에서 백업 테이블을 새로 생성하는 프로시저를 만든다.

프로시저를 생성하고 이벤트 스케쥴(event schedule)까지 걸어보겠다.

 

 

1. MySQL 프로시저 생성하기

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 ;

 

백업테이블이 존재한다면 드랍하고 다시 생성할 것이고

없다면 백업테이블을 기존테이블에서 새로 생성한다는 간단한 쿼리이다.

 

프로시저를 저장했다면 프로시저를 호출해보자.

 

 

2. 프로시저 호출하기

CALL backup_proc();

 

 

 

 

프로시저가 성공적으로 실행됐다면 select 구문에서 설정한 '테이블 백업 성공' 이라는 결과값이 나오고

BACKUP 테이블이 3개 생성된 것을 확인 할 수 있다.

 

3. 이벤트 스케쥴러 사용하기

 

매번 프로시저를 call해서 backup 테이블을 만들수는 없는 것이다.

이벤트 스케쥴러에 등록하여 DAY, MONTH, TIME 별로 시간을 지정해 준다면 자동으로 이벤트가 실행될 것이다.

 

 

- 이벤트 스케쥴러 ON

SHOW VARIABLES LIKE 'event%';
SET GLOBAL event_scheduler = ON ;

 

- 이벤트 만들기

-- 매일 반복해서 실행
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();

 

이벤트를 만들고 스케쥴을 걸어 프로시저를 실행하는 구문이다.

이벤트를 생성하면 현재 등록된 이벤트의 목록을 확인해야 한다.

 

 

- 등록된 이벤트 조회하기

SELECT * FROM information_schema.`EVENTS` ;

 

- 이벤트 삭제하기

DROP EVENT IF EXISTS everyDayEvent1;
DROP EVENT IF EXISTS everyMonthEvent1;
DROP EVENT IF EXISTS everyYearEvent1;

 

백업 테이블명에 백업날짜를 붙여만들거나 

백업 테이블명을 각각 다르게하여 각각 스케쥴링을 걸어놓아 

백업을 정기적으로 할 수 있을 것 같다.

 

출처 : shlee0882.tistory.com/252?category=749851