Cloud

[AWS] RDS SQL Server(MS-SQL) 백업 및 복원하기

RYEAN 2022. 8. 5. 10:27
반응형

 


 

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 가 정상 복원된 것을 확인 할 수 있다!

 

 

[참고 문헌]

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html#SQLServer.Procedural.Importing.Native.Enabling.IAM

 

기본 백업 및 복원 기능을 사용하여 SQL Server 데이터베이스 가져오기 및 내보내기 - Amazon Relational

KMS 키를 사용하는지 여부에 관계없이 기본 백업 및 복원 작업을 통해 S3에 업로드된 파일에 대해 기본값으로 서버 측 고급 암호화 표준(AES) 256비트 암호화를 사용할 수 있습니다.

docs.aws.amazon.com

 

반응형