본문 바로가기
[AWS-RDP]/RDS

[참고][AWS] Aurora MySQL Backup&Restore (백업&복구) Test

by METAVERSE STORY 2023. 7. 3.
반응형

 

AWS Aurora MySQL Backup&Restore 백업&복구 테스트

AWS RDS 스냅샷 기능을 통한 백업/복구(Point in time recovery)

 

 

1. 개요

시스템의 안정적인 운영을 위해 DB(Aws aurora)의 백업/복구(Point in time recovery) 테스트를 수행

  • AWS RDS의 스냅샷(자동, 수동) 기능과 트랜잭션 로그를 활용하여 User가 원하는 시점까지 복구 되는지 확인
  • 원본 DB와 복구 DB간의 테스트 대상 테이블 건수 일치 여부 확인

 

2. 테스트 시나리오

순서 TASK 내용 대상 DB
1 테스트 대상 DB 확인 mysqldb DB로 테스트 수행 mysqldb
2 신규 테이블 생성 임의의 backup_test 테이블 생성 mysqldb
3 신규 생성 테이블의 데이터 건수 확인 "순서 2"에서 생성한 테이블 데이터 건수 확인 (0건) mysqldb
4 원본 DB 백업 (Optional) 원본 DB 백업 수행 (AWS RDS는 5분 단위 자동 백업을 지원하므로 해당 TASK는 수행하지 않아도 무방함) mysqldb
5 DML 수행 (데이터 insert) "순서 2"에서 생성한 테이블에 데이터 insert 수행
(백업 이후 트랜잭션 로그 발생)
mysqldb
6 복제 DB 생성(point time recovery 수행) 자동 백업과 트랜잭션 로그를 이용하여 point time recovery 수행 mysqldb_restore
7 복제 DB 생성 확인 AWS 콘솔에서 복제 DB 생성 내역 확인 mysqldb_restore
8 요구된 복구 시점까지 데이터 복구 여부를 확인 복제 DB 접속하여 "순서 5"에서 수행한 결과와 데이터 건수가 일치하는지 확인 mysqldb_restore

 

3. 테스트 결과 (요약)

순서 TASK 수행시간 정상여부 대상 DB
1 테스트 대상 DB 확인 14:00:00 정상 mysqldb
2 신규 테이블 생성 14:02:14 정상 mysqldb
3 신규 생성 테이블의 데이터 건수 확인 14:03:28 정상 mysqldb
4 원본 DB 백업 (Optional) 14:09:25 정상 mysqldb
5 DML 수행 (데이터 insert) 14:17:03 정상 mysqldb
6 복제 DB 생성(point time recovery 수행) 14:20:00 정상 mysqldb_restore
7 복제 DB 생성 확인 14:29:00 정상 mysqldb_restore
8 요구된 복구 시점까지 데이터 복구 여부를 확인 15:00:55 정상 mysqldb_restore

 

4. 테스트 결과 (상세)

4-1. 테스트 대상 DB 확인 (AWS 콘솔)

 

4-2. 테스트 대상 원본 DB(mysqldb)에 신규 테이블 생성

-- 1. 테스트 테이블 생성
CREATE TABLE backup_test(
    test_uid varchar(27) NOT NULL,
    test_nm varchar(200) NULL,
  PRIMARY KEY(test_uid)
) ENGINE=InnoDB COMMENT='backup_test';

 

4-3. 테스트 대상 원본 DB(mysqldb)에 신규 테이블 데이터 건수 확인

--2. 데이터 건수 확인
 SELECT now() cur_time
      , count(1)
   FROM backup_test;
   
cur_time              count(1)
-------------------- ---------
2022-09-05 14:03:28         0

 

4-4. 테스트 대상 원본 DB(mysqldb) 백업 (Optional)

AWS RDS는 자동 백업 및 트랜잭션 로그를 Amazon S3에 5분마다 자동으로 업로드하므로, 복구를 위해 해당 TASK 는 수행하지 않아도 무방하다.

수동 백업 절차는 다음과 같다.
백업하고자 하는 인스턴스 선택 후 작업에서 '스냅샷 생성'을 선택한다.

 

스냅샷 이름 입력 후 '스냅샷 생성' 버튼을 클릭한다.

 

스냅샷 생성 여부를 확인한다.

 

4-5. 테스트 대상 원본 DB(mysqldb)에 DML 수행 (데이터 insert)

트랜잭션 로그를 발생시킨다.

-- 4. insert 후 데이터 건수 확인
insert into backup_test values ('1', 'James');
insert into backup_test values ('2', 'Jone');
insert into backup_test values ('3', 'Brus');
insert into backup_test values ('4', 'Michael');
commit;

 

insert 된 데이터 건수(4건)를 확인한다.

-- 5. insert 한 데이터 건수 확인
SELECT now() cur_time
     , count(1)
  FROM backup_test;
  
cur_time            count(1)
----------------------------
2022-09-05 14:17:03       4

 

4-6. 복제 DB 생성 (point imte recovery 수행)

복원하고자 하는 DB 또는 클러스터를 선택 후 '특정 시점으로 복원' 을 선택한다.

 

원본 DB에서 insert 완료된 이후 시점을 복구 시점으로 입력하고, 생성할 인스턴스 이름을 입력한다.

실제 복구 시 원본 DB와 동일한 인스턴스 크기를 선택하고 복구 테스트 시에는 작은 크기를 선택하여 수행한다. 만약 실제 복구 상황이라고 한다면 복제 DB 를 생성 후 인스턴스명을 원본 DB 명으로 변경하는 작업을 진행해야 한다.

 

 특정 시점으로 복구(PITR)는 데이터베이스를 지정된 날짜 및 시간에 있던 상태로 복원하는 프로세스이다. PITR을 시작하면 가장 최근의 백업(자동 또는 수동)이 복원되며 그 후에 다음 트랜잭션 로그가 적용되어 Amazon RDS 데이터베이스를 PITR 시간으로 포워드한다.

 

4-7. 복제 DB 생성 확인 (AWS 콘솔)

 

4.8 복제 DB 에서 사용자 지정 복구시점까지 데이터 복구 여부를 확인

엔드포인트를 조회하고 DB Connection 을 Setting 한다.

 

원본 DB 와 복제 DB 간의 데이터 건수 일치 여부를 확인한다.

-- 6. 데이터 건수 일치 여부 확인
SELECT now() cur_time
     , count(1)
  FROM backup_test;
  
cur_time            count(1)
----------------------------
2022-09-05 15:00:55       4

 

5. 결론

AWS RDS 는 내부적으로 DB 인스턴스에 대한 트랜잭션 로그를 Amazon S3 에 5분마다 업로드하기 때문에 LastestRestoreableTime (일반적으로 마지막 5분) 이내의 상태로 복원이 가능하고, 또한 사용자가 원하는 특정 시점까지 복구가 가능하다.

 

 

 

 

출처 : https://dbtechbiz.tistory.com/20

반응형

댓글