Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

SQL Server 데이터베이스를 AWS RDS 인스턴스로 마이그레이션하는 완벽 가이드

이 글에서는 온프레미스(또는 Amazon® EC2, Azure®)에 호스팅된 Microsoft® SQL Server® 데이터베이스를 Amazon Relational Database Service(RDS)로 이전하는 방법을 설명합니다. 이 과정은 SQL 데이터베이스를 AWS S3 버킷으로 백업한 뒤, 해당 S3 버킷에서 AWS RDS 인스턴스로 데이터베이스를 복원하는 방식으로 진행됩니다.

소개

이전 버전의 Amazon RDS 인스턴스에서는 .bak 파일로부터 데이터를 복원할 수 없었습니다. 그 결과 사용자는 Amazon Database Migration Service나 Import/Export 마법사를 사용해야만 AWS RDS 간에 데이터를 주고받을 수 있었습니다.

Amazon은 2016년 7월 네이티브 백업 및 복원(Native Backup Restore) 기능 지원을 시작했으며, RDS의 MSDB 데이터베이스에 다음과 같은 저장 프로시저를 추가했습니다.

  • rds_backup_database – 단일 데이터베이스를 S3 버킷으로 백업합니다.
  • rds_restore_database – S3에서 단일 데이터베이스를 복원합니다.
  • rds_task_status – 실행 중인 백업 및 복원 작업의 진행 상태를 추적합니다.
  • rds_cancel_task – 실행 중인 백업 또는 복원 작업을 취소합니다.

이 글에서는 rds_restore_database 프로시저를 활용해 S3에서 .bak 파일을 복원하는 방법과, rds_task_status 프로시저로 복원 진행 상황을 모니터링하는 방법을 다룹니다. 또한 AWS S3 sync 명령어를 사용해 백업 파일을 S3 버킷에 업로드하는 방법도 함께 살펴봅니다.

사전 준비 사항

마이그레이션을 수행하려면 다음 항목들이 준비되어 있어야 합니다.

  • SQL Server Agent 프록시
  • AWS 명령줄 인터페이스(AWS CLI)
  • ProfileName(aws_access_key_idaws_secret_access_key를 포함하여 Amazon S3 및 S3 버킷에 접근 권한이 있는 AWS 사용자)
  • SQLSERVER_BACKUP_RESTORE 옵션이 매핑된 적절한 옵션 그룹이 적용된 AWS RDS 인스턴스
  • PowerShell 설치

또한 SQL Server 기본 지식, S3 버킷 생성, AWS 사용자 생성, S3 버킷 접근 권한 부여, RDS 인스턴스 생성에 대한 기본적인 이해가 필요합니다.

솔루션 개요

마이그레이션은 다음 세 단계로 진행됩니다.

  1. 로컬 서버에서 데이터베이스를 백업합니다.
  2. 백업 파일을 AWS S3 버킷으로 복사합니다.
  3. S3 버킷에서 RDS로 SQL 백업을 복원합니다.

1단계: 로컬 서버에서 데이터베이스 백업

로컬 백업은 어떤 방법을 사용해도 무방합니다. 아래 예제는 .bat 스크립트와 sqlcmd 명령을 활용한 방식으로, 마이그레이션 작업을 예약 실행해야 하는 경우 SQL Agent 잡에서도 동일하게 사용할 수 있습니다.

Sqlcmd -S SourceInstanceName -U sa -P password_here -Q
"Declare @DBName nvarchar(200)='MigrationTestDB'
DECLARE @BackupLocation NVARCHAR(2000) = 'C:\Temp\RDSmigration\backup\'+@DBName+
+ REPLACE(CONVERT(VARCHAR(20), GETDATE(), 120) + '.bak', ':', '');
BACKUP DATABASE @DBName TO DISK = @BackupLocation with compression;"

2단계: 백업 파일을 AWS S3 버킷으로 복사 및 업로드

이 단계는 AWS S3 copy 또는 AWS S3 sync 명령어로 수행할 수 있습니다. 다만 sync 명령어가 업계에서 가장 널리 사용되고 있으므로, 아래 예제에서는 sync 명령어를 사용합니다.

기본적으로 AWS sync 명령어는 파일을 삭제하지 않고 새로 생성되거나 변경된 파일만 대상 위치로 복사합니다. 다음 PowerShell 스크립트는 SQL Agent 잡에 활용할 수 있습니다. 백업 단계와 이 복사 단계 모두 cmdExec와 PowerShell 하위 시스템을 실행하도록 구성된 SQL Agent 프록시 계정으로 실행해야 한다는 점에 유의하세요.

$LogDate = Get-Date -Format yyyy-MM-dd
$Global:LogFile = "C:\Temp\RDSmigration\Logs\$LogDate.log"

$env:Path += ';C:\Program Files\Amazon\AWSCLI\bin'

Set-AWSCredential -ProfileName backuptos3user
aws configure set aws_access_key_id AKIAVIH6FYWVO62BZ7QA
aws configure set aws_secret_access_key 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
aws configure set region ap-south-1

try
{
   $now = (Get-Date -Format G)
   aws s3 sync C:\Temp\RDSmigration\backup s3:// ramkrdsrestore --sse | out-file $LogFile
}
catch {
   Write-Host $_.Exception.Message -ForegroundColor Green
}

3단계: S3 버킷에서 RDS로 SQL 백업 복원

다음 명령을 실행하면 MigrationTestDB2019-08-15 181640.bak 파일을 MigrationTestDB 데이터베이스로 복원할 수 있습니다.

EXEC msdb.dbo.rds_restore_database
   @restore_db_name = 'MigrationTestDB',
   @S3_arn_to_restore_from = 'arn:aws:s3:::ramkrdsrestore/MigrationTestDB2019-08-15 181640.bak'
SQL Server 데이터베이스를 AWS RDS 인스턴스로 마이그레이션하는 완벽 가이드

저장 프로시저에 전달되는 파라미터를 확인하세요. 다음 두 가지를 지정해야 합니다.

  • 복원할 데이터베이스의 이름
  • 백업 파일의 Amazon Resource Name(ARN). S3 객체의 ARN은 위 예제와 같은 형식을 따릅니다.

명령을 실행하면 SQL Server가 복원 작업을 시작하고 TaskID를 할당합니다. 아래 명령으로 해당 작업의 상태를 손쉽게 추적할 수 있습니다.

EXEC  msdb.[dbo].[rds_task_status]  @db_name ='DestinationDBName'

@db_name 대신 TaskID를 사용해 진행 상황을 추적할 수도 있습니다.

SQL Server 데이터베이스를 AWS RDS 인스턴스로 마이그레이션하는 완벽 가이드

복원 시 다음 사항들을 반드시 유의해야 합니다.

  • rds_restore_database 프로시저에서는 S3 버킷 내 백업 파일 이름의 대소문자가 구분됩니다.
  • 옵션 그룹에 사용된 IAM 역할이 해당 S3 버킷에 접근할 수 있어야 합니다.
  • S3 버킷 정책이 IAM 역할을 배제하지 않도록 제한적이지 않아야 합니다.
  • RDS SQL 인스턴스에 백업/복원 옵션이 추가된 올바른 옵션 그룹이 적용되어 있어야 합니다. 이 설정은 매우 중요하며, 누락되면 복원이 시작되지 않습니다.

Amazon RDS에서 SQL Server 네이티브 백업/복원의 제약 사항

Amazon RDS의 SQL Server 네이티브 백업 및 복원에는 다음과 같은 제약이 있습니다.

  • 차등 백업, 트랜잭션 로그 백업, 파일 그룹 백업/복원은 불가능하지만, 데이터 복구에는 큰 지장이 없습니다. Amazon RDS는 예약된 인스턴스 스냅샷 생성을 지원하며, 스냅샷은 최대 35일간 롤링 방식으로 보관됩니다. 지난 35일 이내의 특정 시점으로 인스턴스를 5분 이내에 복원할 수 있습니다.
  • KMS로 암호화된 백업을 S3에서 온프레미스로 복원할 수 없습니다.
  • 동일한 RDS 인스턴스 내에서 데이터베이스를 복원할 수 없습니다.
  • TDE(Tabular Data Encryption)가 활성화된 데이터베이스의 백업은 복원할 수 없습니다.
  • 대상 RDS 인스턴스가 S3 버킷에 접근할 수 있어야 합니다.
  • RDS SQL Server 네이티브 백업/복원 명령을 실행하는 사용자 계정에는 적절한 권한이 부여되어 있어야 합니다.

결론

이 글에서는 데이터베이스를 클라우드 대상지(S3)에 백업하고 이를 AWS RDS 인스턴스에서 복원하는 방법을 살펴보았습니다. RDS 인스턴스는 드라이브나 서버에 대한 직접 접근을 허용하지 않기 때문에, 핵심은 백업 파일을 AWS S3 버킷으로 전송한 후 그곳에서 복원하는 것입니다.

이 방법의 또 다른 활용 사례는 SQL 백업을 AWS S3에 직접 저장하는 것입니다. 이를 통해 데이터 가용성, 보안, 성능을 모두 향상시킬 수 있습니다. Amazon S3는 99.999999999%(11개의 9)의 내구성을 목표로 설계되었으며, 대량의 물리적 스토리지를 절약할 수 있어 데이터베이스 백업 저장 측면에서 비용 효율성이 뛰어납니다.

궁금한 점이나 의견이 있다면 피드백 탭을 통해 남겨주세요.

전문가의 관리·운영·구성 서비스로 환경 최적화하기

Rackspace의 애플리케이션 서비스 (RAS) 전문가들은 폭넓은 애플리케이션 포트폴리오 전반에서 다음과 같은 전문 및 관리형 서비스를 제공합니다.

  • e커머스 및 디지털 경험 플랫폼
  • ERP(Enterprise Resource Planning)
  • BI(Business Intelligence)
  • Salesforce CRM(Customer Relationship Management)
  • 데이터베이스
  • 이메일 호스팅 및 생산성 솔루션

Rackspace가 제공하는 것:

  • 편향 없는 전문성: 즉각적인 가치를 창출하는 역량에 집중하여 현대화 여정을 간소화하고 안내합니다.
  • Fanatical Experience™: '프로세스 우선, 기술은 그다음(Process first. Technology second.)'이라는 철학과 전담 기술 지원을 결합해 종합적인 솔루션을 제공합니다.
  • 타의 추종을 불허하는 포트폴리오: 풍부한 클라우드 경험을 바탕으로 올바른 클라우드에 맞는 기술 선택과 배포를 지원합니다.
  • 애자일한 전달: 고객의 여정 어느 단계에서든 함께하며 고객의 성공을 곧 우리의 성공으로 여깁니다.

데이터베이스 서비스에 대해 자세히 알아보세요.

의견이나 질문이 있다면 피드백 탭을 이용해 주세요. 언제든지 대화를 시작할 수 있습니다.