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분) 이내의 상태로 복원이 가능하고, 또한 사용자가 원하는 특정 시점까지 복구가 가능하다.
'[AWS-RDP] > RDS' 카테고리의 다른 글
[중요][AWS] RDS 에서 Slow Query 확인하기!! (2) | 2023.07.08 |
---|---|
[중요][AWS] Aurora RDS에서 ' Too many connections' 에러 발생 시 원인과 해결방법 (0) | 2023.06.19 |
[중요] mysql user확인 및 추가 (0) | 2023.04.20 |
[중요2][AWS] MySQL - 6. 로그 수집하기 (0) | 2023.04.19 |
[중요][AWS] MySQL 로그와 General, Slow Log 설정 (with. Aurora) (0) | 2023.04.19 |
[참고][Amazon Aurora] Aurora 느린 쿼리 로그 CloudWatch에서 확인하기 (0) | 2023.04.19 |
[참고] Amazon RDS for MySQL (4) - 8.0 버전에서 변경 사항 (0) | 2023.04.04 |
[중요] AWS RDS MySQL 8 대소문자 구분 안하도록 설정하기 (0) | 2023.04.04 |
댓글