AWS RDS SQL Server 백업은 서버의 로컬 파일 시스템을 사용하는 대신 Amazon S3 의 버킷이라는 저장소를 사용한다.
백업을 진행하기 위해서는 다음 세 가지 구성 요소가 필요하다.
(1) 백업 파일을 저장할 Amazon S3 버킷.
(2) 버킷 접근을 위한 IAM 역할.
(3) SQLSERVER_BACKUP_RESTORE 옵션 추가.
1. Amazon S3 버킷 생성
AWS Console 에서 Amazon S3 에서 버킷을 생성해보자.
옵션은 각 환경에 맞게 설정해주면 되며, 나는 아래와 같이 설정 후 생성했다.
- 버킷 이름: dbbackup
- AWS 리전: 아시아 태평양(홍콩)
- 객체 소유권: ACL 비활성화됨(권장)
- 이 버킷의 퍼블릭 액세스 차단 설정: 모든 퍼블릭 액세스 차단
- 버킷 버전 관리: 활성화
- 기본 암호화: 비활성화
2. 옵션 그룹 생성 (생성한 옵션 그룹이 있다면 pass)
SQLSERVER_BACKUP_RESTORE 옵션 추가를 위한 옵션 그룹을 먼저 생성해준다.
3. SQLSERVER_BACKUP_RESTORE 옵션 추가
생성한 옵션 그룹을 선택하여 [옵션 추가] 를 선택한다.
아래와 같이 옵션을 세팅한 후, 옵션을 추가해준다.
- 옵션 이름: SQLSERVER_BACKUP_RESTORE
- IAM 역할: 새 역할 생성
- IAM 역할 이름: dbbackup-role (원하는 IAM 역할 이름 입력)
- S3 버킷: dbbackup (아까 생성한 버킷 지정)
즉시 예약을 통해 옵션을 적용해준다.
4. DB 인스턴스 옵션 그룹 적용 (적용이 이미 되어 있다면 pass)
백업/복원을 원하는 DB 인스턴스를 수정하여 생성한 옵션 그룹을 변경 후, 적용한다.
5. 백업
백업은 msdb 의 rds_backup_database 프로시저를 사용해서 진행할 수 있다.
exec msdb.dbo.rds_backup_database
@source_db_name='database_name',
@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name.extension',
[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
[@overwrite_s3_backup_file=0|1],
[@type='DIFFERENTIAL|FULL'],
[@number_of_files=n];
*필수사항
@source_db_name: 백업할 DB명
@s3_arn_to_backup_to: 백업 파일이 저장이 될 버킷 경로 및 파일명
*선택사항
[@kms_master_key_arn]: 항목을 암호화하는 데 사용할 대칭 암호화 KMS 키
[@overwrite_s3_backup_file]: 기존 백업 파일을 덮어쓸지 여부 값
- 0: 덮어쓰지 않음 1: 덮어씀 (0 이 기본 값이며, 파일이 이미 존재할 경우 오류를 반환)
[@type]: 백업 유형
- FULL: 전체 백업 DIFFERENTIAL: 차등 백업 (기본 값은 FULL)
[@number_of_files]: 백업 파일 분할 개수
- 최대 10개까지 분할 가능하며, 기본 값은 1 이다.
자 이제 백업을 진행해보자.
나는 mg 라는 DB 를 dbbackup 이라는 버킷에 mg_test 라는 백업 파일명을 생성해주려고 하며,
기존 백업 파일이 있다면 덮어씌우기 옵션을 선택했다.
exec msdb.dbo.rds_backup_database
@source_db_name='mg',
@s3_arn_to_backup_to='arn:aws:s3:::dbbackup/mg_test',
@overwrite_s3_backup_file=1;
백업/복원 진행 상황을 알고 싶으면, 아래 쿼리들을 통해서 확인 할 수 있다.
-- 해당 DB 의 모든 작업 상태 조회
exec msdb.dbo.rds_task_status @db_name='mg'
-- 특정 작업ID 의 해당되는 작업 상태 조회
exec msdb.dbo.rds_task_status @task_id= 1
-- 현재 인스턴스의 모든 작업 상태 조회
exec msdb.dbo.rds_task_status;
백업 완료 후 버킷을 가보면 정상적으로 파일이 저장되었음을 확인 할 수 있다.
6. 복원
백업은 msdb 의 rds_restore_database 프로시저를 사용해서 진행할 수 있다.
exec msdb.dbo.rds_restore_database
@restore_db_name='database_name',
@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name.extension',
@with_norecovery=0|1,
[@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id'],
[@type='DIFFERENTIAL|FULL'];
*필수사항
@restore_db_name: 복원할 DB명
@s3_arn_to_restore_from: 복원할 파일의 버킷 경로 및 파일명 (다중 파일의 경우, * 를 붙여준다.)
@with_norecovery: 복원 작업에 사용할 복구 절
- 0: RECOVERY 1: NORECOVERY (차등 복원을 할 경우 사용)
*선택사항
[@kms_master_key_arn]: 백업 파일을 암호화한 경우 파일 복호화에 사용할 KMS 키
[@type]: 복원 유형
- FULL: 전체 복원 DIFFERENTIAL: 차등 복원 (기본 값은 FULL)
자 이제 복원을 해보자.
dbbackup 버킷의 mg_test 백업 파일을 mg_test 라는 DB 에 FULL 복원하려고 한다.
exec msdb.dbo.rds_restore_database
@restore_db_name='mg_test',
@s3_arn_to_restore_from='arn:aws:s3:::dbbackup/mg_test',
@with_norecovery=0;
아까와 동일하게 msdb.dbo.rds_task_status 를 통해 복원 진행사항을 확인 할 수 있다.
복원이 완료되니 mg_test DB 가 정상 복원된 것을 확인 할 수 있다!
[참고 문헌]
'Cloud' 카테고리의 다른 글
[Cloud] 가상머신(Virtual Machine) vs 컨테이너(Container) (0) | 2024.04.08 |
---|---|
[AWS] RDS SQL Server(MS-SQL) Agent Jobs 삭제 (0) | 2022.08.25 |
[AWS] RDS MySQL Audit Log 설정 (옵션 그룹, CloudWatch) (0) | 2022.07.11 |
[AWS] RDS MySQL 언어 변경 (utf8 / utf8mb4, character-set, collation) (0) | 2022.06.29 |
[GCP] MySQL Timezone (타임존) 변경 (0) | 2020.11.19 |