MySQL DB 인스턴스로 백업 복원 - Amazon Relational Database Service

MySQL DB 인스턴스로 백업 복원

백업 파일을 사용하여 Amazon RDS에서 MySQL 데이터베이스 가져오기를 지원합니다. 데이터베이스의 백업을 생성하여 Amazon S3에 저장한 다음 MySQL을 실행하는 새로운 Amazon RDS DB 인스턴스에 백업 파일을 복원할 수 있습니다.

이 단원에서 설명하는 시나리오는 온프레미스 데이터베이스의 백업을 복원합니다. 데이터베이스에 액세스할 수 있는 한, 이 기술을 다른 위치(예: Amazon EC2 또는 AWS 이외의 클라우드 서비스)의 데이터베이스에 사용할 수 있습니다.

다음 다이어그램에서 지원되는 시나리오를 찾을 수 있습니다.


            S3 아키텍처에서 백업 파일을 가져오는 MySQL

Amazon S3에서 백업 파일을 가져오는 작업은 모든 AWS 리전에서 MySQL에 대해 지원됩니다.

백업 파일을 만들고, 복사하고, 복원하는 동안 온프레미스 데이터베이스를 오프라인 상태로 둘 수 있다면 백업 파일을 사용하여 데이터베이스를 Amazon RDS로 가져오는 것이 좋습니다. 데이터베이스를 오프라인 상태로 둘 수 없는 경우 이 주제에서 설명한 대로 Amazon S3를 통해 Amazon RDS로 마이그레이션한 후 데이터베이스를 업데이트하기 위해 바이너리 로그(binlog) 복제를 사용할 수 있습니다. 자세한 내용은 외부 소스 인스턴스를 사용하여 이진 로그 파일 위치 복제 구성 섹션을 참조하세요. 또한 AWS Database Migration Service를 사용하여 데이터베이스를 Amazon RDS로 마이그레이션할 수도 있습니다. 자세한 내용은 AWS Database Migration Service란 무엇입니까?를 참조하십시오.

Amazon S3에서 Amazon RDS로 백업 파일 가져오기에 대한 제한 및 권장 사항

다음은 Amazon S3에서 백업 파일을 가져올 때의 몇 가지 제한 및 권장 사항입니다.

  • 기존 DB 인스턴스가 아닌 새 DB 인스턴스로만 데이터를 가져올 수 있습니다.

  • 온프레미스 데이터베이스 백업을 생성할 때 Percona XtraBackup을 사용해야 합니다.

  • DB 스냅샷 내보내기에서 Amazon S3로 데이터를 가져올 수 없습니다.

  • 기본 MySQL 데이터 디렉터리 외부에서 정의된 테이블이 있는 원본 데이터베이스에서 마이그레이션할 수 없습니다.

  • AWS 리전에 있는 MySQL 메이저 버전의 기본 마이너 버전으로 데이터를 가져와야 합니다. 예를 들어, 메이저 버전이 MySQL 8.0이고 AWS 리전의 기본 마이너 버전이 8.0.28인 경우 데이터를 MySQL 버전 8.0.28 DB 인스턴스로 가져와야 합니다. 가져온 후 DB 인스턴스를 업그레이드할 수 있습니다. 기본 마이너 버전 결정에 대한 자세한 내용은 Amazon RDS의 MySQL 버전 단원을 참조하십시오.

  • 메이저 버전과 마이너 버전 모두 역방향 마이그레이션은 지원하지 않습니다. 예를 들어 버전 8.0에서 버전 5.7로, 버전 8.0.32에서 버전 8.0.31로 마이그레이션할 수 없습니다.

  • MySQL 5.5 또는 5.6 데이터베이스는 가져올 수 없습니다.

  • 한 메이저 버전에서 다른 메이저 버전으로 온프레미스 MySQL 데이터베이스를 가져올 수 없습니다. 예를 들어 MySQL 5.7 데이터베이스를 RDS for MySQL 8.0 데이터베이스로 가져올 수 없습니다. 가져오기가 완료되면 DB 인스턴스를 업그레이드할 수 있습니다.

  • 암호화된 원본 데이터베이스에서 복원할 수 없지만 암호화된 Amazon RDS DB 인스턴스로 복원할 수 있습니다.

  • Amazon S3 버킷에서는 암호화된 버킷에서 복원할 수 없습니다.

  • Amazon RDS DB 인스턴스와 다른 AWS 리전에서는 Amazon S3 버킷으로 복원할 수 없습니다.

  • Amazon S3에서 가져오기는 db.t2.micro DB 인스턴스 클래스에서 지원되지 않습니다. 그러나 다른 DB 인스턴스 클래스로 복원한 다음 나중에 DB 인스턴스 클래스를 변경할 수 있습니다. 인스턴스 클래스에 대한 자세한 내용은 에 대한 DB 인스턴스 클래스의 하드웨어 사양 단원을 참조하십시오.

  • Amazon S3는 Amazon S3 버킷에 업로드되는 파일 크기를 5TB로 제한합니다. 백업 파일이 5TB를 초과하면 해당 백업 파일을 더 작은 크기의 파일들로 나누어야 합니다.

  • 데이터베이스를 복원하면 백업이 복사된 다음 DB 인스턴스에 추출됩니다. 따라서 백업 크기의 합계와 디스크의 원본 데이터베이스 크기를 더한 값보다 크거나 같은 DB 인스턴스에 대한 스토리지 공간을 프로비저닝합니다.

  • Amazon RDS는 Amazon S3 버킷에 업로드되는 파일을 100만 개로 제한합니다. 모든 전체 및 증분 백업을 포함하여 데이터베이스에 대한 백업 데이터가 100만 개의 파일을 초과하는 경우 Gzip(.gz), tar(.tar.gz) 또는 Percona xbstream(.xbstream) 파일을 사용하여 전체 및 증분 백업 파일을 Amazon S3 버킷에 저장합니다. Percona Xtrabackup 8.0은 압축에 Percona xbstream만 지원합니다.

  • 사용자 계정을 자동으로 가져오지 않습니다. 원본 데이터베이스에서 사용자 계정을 저장하고 나중에 새 DB 인스턴스에 추가하십시오.

  • 함수를 자동으로 가져오지 않습니다. 원본 데이터베이스에서 함수를 저장하고 나중에 새 DB 인스턴스에 추가하십시오.

  • 저장 프로시저를 자동으로 가져오지 않습니다. 원본 데이터베이스에서 저장 프로시저를 저장하고 나중에 새 DB 인스턴스에 추가하십시오.

  • 시간대 정보를 자동으로 가져오지 않습니다. 원본 데이터베이스에서 시간대 정보를 저장하고 나중에 새 DB 인스턴스의 시간대를 설정하십시오. 자세한 내용은 MySQL DB 인스턴스의 현지 시간대 섹션을 참조하세요.

  • innodb_data_file_path 파라미터는 기본 데이터 파일 이름 "ibdata1:12M:autoextend"를 사용하는 데이터 파일 하나만 사용하여 구성해야 합니다. 두 개의 데이터 파일이 있거나 다른 이름의 데이터 파일이 있는 데이터베이스는 이 방법을 사용하여 마이그레이션할 수 없습니다.

    다음은 허용되지 않는 파일 이름의 예입니다. "innodb_data_file_path=ibdata1:50M; ibdata2:50M:autoextend""innodb_data_file_path=ibdata01:50M:autoextend".

  • 복원된 데이터베이스의 최대 크기는 지원되는 최대 데이터베이스 크기에서 백업 크기를 뺀 값입니다. 따라서 지원되는 최대 데이터베이스 크기가 64TiB이고 백업 크기가 30TiB이면 복원된 데이터베이스의 최대 크기는 다음 예와 같이 34TiB가 됩니다.

    64 TiB - 30 TiB = 34 TiB

    Amazon RDS for MySQL에서 지원하는 최대 데이터베이스 크기에 대한 자세한 내용은 범용 SSD 스토리지프로비저닝된 IOPS SSD 스토리지 단원을 참조하십시오.

Amazon S3에서 Amazon RDS로 백업 파일을 가져오는 설정 개요

Amazon S3에서 Amazon RDS로 백업 파일을 가져오는 설정에 필요한 구성 요소가 있습니다.

  • 백업 파일을 저장할 Amazon S3 버킷.

  • Percona XtraBackup이 생성한 온프레미스 데이터베이스 백업.

  • Amazon RDS가 버킷에 액세스할 수 있도록 허용하는 AWS Identity and Access Management(IAM) 역할입니다.

이미 Amazon S3 버킷이 있으면 그 버킷을 사용하면 됩니다. Amazon S3 버킷이 없는 경우에는 새 버킷을 만들 수 있습니다. 새 버킷을 만드는 방법은 버킷 생성을 참조하십시오.

백업을 생성하려면 Percona XtraBackup 도구를 사용하십시오. 자세한 내용은 데이터베이스 백업 생성 섹션을 참조하세요.

이미 IAM 역할이 있으면 그 역할을 사용하면 됩니다. IAM 역할이 없는 경우에는 수동으로 새 역할을 만들 수 있습니다. 또는 AWS Management Console을 사용하여 데이터베이스를 복원할 때 마법사로 계정에서 새 IAM 역할이 생성되도록 선택할 수 있습니다. 수동으로 새 IAM 역할을 만들거나 기존 IAM 역할에 신뢰 및 권한 정책을 연결하려면 수동으로 IAM 역할 만들기 단원을 참조하십시오. 새 IAM 역할을 생성하려면 콘솔의 프로시저를 따르십시오.

데이터베이스 백업 생성

백업을 생성하려면 Percona XtraBackup 소프트웨어를 사용하십시오. 최신 버전의 Percona XtraBackup을 사용하는 것이 좋습니다. Percona XtraBackup은 Download Percona XtraBackup에서 설치할 수 있습니다.

주의

데이터베이스 백업을 만들 때 Xtrabackup은 xtrabackup_info 파일에 자격 증명을 저장할 수 있습니다. 해당 파일을 검사하여 tool_command 설정에는 민감한 정보가 포함되어 있지 않아야 합니다.

참고

MySQL 8.0 마이그레이션을 위해서는 Percona XtraBackup 8.0을 사용해야 합니다. Percona Xtrabackup 8.0.12 이상 버전은 모든 MySQL 버전의 마이그레이션을 지원합니다. RDS for MySQL 8.0.20 이상으로 마이그레이션하는 경우, 당신은 Percona XtraBackup 8.0.12 이상을 사용해야 합니다.

MySQL 5.7 마이그레이션을 위해 Percona XtraBackup 2.4도 사용할 수 있습니다. 또한 이전 MySQL 버전의 마이그레이션을 위해 Percona XtraBackup 2.3 또는 2.4를 사용할 수 있습니다.

Percona XtraBackup을 사용하여 MySQL 데이터베이스 파일의 전체 백업을 생성할 수 있습니다. 또는 이미 Percona XtraBackup을 사용하여 MySQL 데이터베이스 파일을 백업 중인 경우 기존의 전체 및 증분 백업 디렉터리 및 파일을 업로드할 수 있습니다.

Percona XtraBackup을 사용한 데이터베이스 백업에 대한 자세한 내용은 Percona 웹 사이트의 Percona XtraBackup - DocumentationThe xtrabackup Binary를 참조하십시오.

Percona XtraBackup을 사용한 전체 백업 생성

Amazon S3에서 복원할 수 있는 MySQL 데이터베이스 파일의 전체 백업을 생성하려면 Percona XtraBackup 유틸리티(xtrabackup)를 사용하여 데이터베이스를 백업합니다.

예를 들어, 다음 명령을 실행하면 MySQL 데이터베이스 백업을 만들고 /on-premises/s3-restore/backup 폴더에 파일을 저장합니다.

xtrabackup --backup --user=<myuser> --password=<password> --target-dir=</on-premises/s3-restore/backup>

백업을 파일 하나로 압축하려면(필요하면 나중에 분할 가능) 다음 형식 중 하나로 백업을 저장하면 됩니다.

  • Gzip(.gz)

  • tar(.tar)

  • Percona xbstream(.xbstream)

참고

Percona Xtrabackup 8.0은 압축에 Percona xbstream만 지원합니다.

다음 명령을 실행하면 Gzip 파일 여러 개로 된 MySQL 데이터베이스 백업이 만들어집니다.

xtrabackup --backup --user=<myuser> --password=<password> --stream=tar \ --target-dir=</on-premises/s3-restore/backup> | gzip - | split -d --bytes=500MB \ - </on-premises/s3-restore/backup/backup>.tar.gz

다음 명령을 실행하면 tar 파일 여러 개로 된 MySQL 데이터베이스 백업이 만들어집니다.

xtrabackup --backup --user=<myuser> --password=<password> --stream=tar \ --target-dir=</on-premises/s3-restore/backup> | split -d --bytes=500MB \ - </on-premises/s3-restore/backup/backup>.tar

다음 명령을 실행하면 xbstream 파일 여러 개로 된 MySQL 데이터베이스 백업이 만들어집니다.

xtrabackup --backup --user=<myuser> --password=<password> --stream=xbstream \ --target-dir=</on-premises/s3-restore/backup> | split -d --bytes=500MB \ - </on-premises/s3-restore/backup/backup>.xbstream
참고

다음 오류가 표시되는 경우 명령에서 파일 형식이 혼합된 것이 원인일 수 있습니다.

ERROR:/bin/tar: This does not look like a tar archive

Percona XtraBackup을 사용한 증분 백업 사용

이미 Percona XtraBackup을 사용하여 MySQL 데이터베이스 파일의 전체 및 증분 백업을 수행 중인 경우 전체 백업을 만들고 백업 파일을 Amazon S3로 업로드할 필요가 없습니다. 대신, 기존 백업 디렉터리 및 파일을 Amazon S3 버킷으로 복사하여 시간을 크게 절약할 수 있습니다. Percona XtraBackup을 사용한 증분 백업 생성에 대한 자세한 내용은 Incremental Backup을 참조하십시오.

기존의 전체 및 증분 백업 파일을 Amazon S3 버킷으로 복사할 때 기본 디렉터리의 콘텐츠를 반복적으로 복사해야 합니다. 이러한 콘텐츠에는 전체 백업이 포함되며 모든 증분 백업 디렉터리 및 파일도 포함됩니다. 이 복사본은 Amazon S3 버킷의 디렉터리 구조를 보존해야 합니다. Amazon RDS는 모든 파일과 디렉터리를 반복합니다. Amazon RDS는 각 증분 백업에 포함된 xtrabackup-checkpoints 파일을 사용하여 기본 디렉터리를 식별하고 LSN(로그 시퀀스 번호) 범위별로 증분 백업을 정렬합니다.

Percona XtraBackup의 백업 고려 사항

Amazon RDS은 파일 이름을 기준으로 백업 파일을 사용합니다. 파일 형식에 따라 백업 파일에 적절한 파일 확장명을 지정합니다. 예를 들어, Percona xbstream 형식을 사용하여 저장한 파일에는 .xbstream을 지정합니다.

Amazon RDS는 알파벳 순서뿐 아니라 자연수 순서로도 백업 파일을 사용합니다. split 명령을 실행할 때는 xtrabackup 옵션을 사용하여 적절한 순서로 백업 파일을 작성하고 이름을 붙여야 합니다.

Amazon RDS는 Percona XtraBackup을 사용하여 생성되는 부분 백업을 지원하지 않습니다. 데이터베이스의 소스 파일을 백업할 때 --tables, --tables-exclude, --tables-file, --databases, --databases-exclude 또는 --databases-file 옵션을 사용하여 부분 백업을 만들 수 없습니다.

Amazon RDS에서는 Percona XtraBackup을 사용한 증분 백업을 지원합니다. Percona XtraBackup을 사용한 증분 백업 생성에 대한 자세한 내용은 Incremental Backup을 참조하십시오.

수동으로 IAM 역할 만들기

IAM 역할이 없는 경우에는 수동으로 새 역할을 만들 수 있습니다. 또는 AWS Management Console을 사용하여 데이터베이스를 복원할 때 마법사로 새 IAM 역할이 생성되도록 할 수도 있습니다. 새 IAM 역할을 생성하려면 콘솔의 프로시저를 따르십시오.

Amazon S3에서 데이터베이스를 가져오기 위해 새 IAM 역할을 수동으로 생성하려면 Amazon RDS에서 Amazon S3 버킷으로 권한을 위임하기 위한 역할을 생성합니다. IAM 역할을 만들 때 신뢰 및 권한 정책을 연결합니다. Amazon S3에서 백업 파일을 가져오려는 경우 다음 예제와 비슷한 신뢰 및 권한 정책을 사용합니다. 역할을 만드는 방법에 대한 자세한 내용은 AWS 서비스에 대한 권한을 위임할 역할 생성을 참조하세요.

또는 AWS Management Console을 사용하여 데이터베이스를 복원할 때 마법사로 새 IAM 역할이 생성되도록 할 수도 있습니다. 새 IAM 역할을 생성하려면 콘솔의 프로시저를 따르십시오.

신뢰 및 권한 정책에 따라 ARN(Amazon 리소스 이름)을 제공해야 합니다. ARN 형식에 대한 자세한 내용은 ARN(Amazon 리소스 이름) 및 AWS 서비스 네임스페이스를 참조하세요.

예 Amazon S3에서 가져오기 위한 신뢰 정책
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "rds.amazonaws.com"}, "Action": "sts:AssumeRole" }] }
예 Amazon S3에서 가져오기 위한 권한 정책 — IAM 사용자 권한
{ "Version":"2012-10-17", "Statement": [ { "Sid":"AllowS3AccessRole", "Effect":"Allow", "Action":"iam:PassRole", "Resource":"arn:aws:iam::IAM User ID:role/S3Access" } ] }
예 Amazon S3에서 가져오기 위한 권한 정책 — 역할 권한
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::bucket_name" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::bucket_name/prefix*" } ] }
참고

파일 이름 접두사를 포함하는 경우 접두사 다음에 별표(*)를 포함합니다. 접두사를 지정하지 않으려면 별표만 지정하면 됩니다.

Amazon S3에서 새 MySQL DB 인스턴스로 데이터 가져오기

AWS Management Console, AWS CLI 또는 RDS API를 사용하여 새로운 MySQL DB 인스턴스로 Amazon S3의 데이터를 가져올 수 있습니다.

Amazon S3에서 새 MySQL DB 인스턴스로 데이터를 가져오려면
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. Amazon RDS 콘솔의 오른쪽 상단에서 DB 인스턴스를 생성할 AWS 리전을 선택합니다. 데이터베이스 백업이 포함된 Amazon S3 버킷과 동일한 AWS 리전을 선택합니다.

  3. 탐색 창에서 데이터베이스를 선택합니다.

  4. S3에서 복원(Restore from S3)을 선택합니다.

    S3에서 복원하여 데이터베이스 생성(Create database by restoring from S3) 페이지가 나타납니다.

    
                                S3에서 DB 인스턴스를 복원하기 위한 세부 정보를 지정하는 페이지
  5. S3 대상(S3 destination)에서 다음을 수행합니다.

    1. 백업이 포함된 S3 버킷을 선택합니다.

    2. (선택 사항) S3 폴더 경로 접두사에 Amazon S3 버킷에 저장되는 파일의 파일 경로 접두사를 입력합니다.

      접두사를 지정하지 않는 경우, RDS는 S3 버킷의 루트 폴더에 있는 모든 파일과 폴더를 사용하여 DB 인스턴스를 만듭니다. 접두사를 지정하는 경우 RDS는 파일의 경로가 지정된 접두사로 시작하는 S3 버킷의 파일과 폴더를 사용하여 DB 인스턴스를 만듭니다.

      예를 들어 이름이 backups인 하위 폴더의 S3에 백업 파일을 저장했고 여러 세트의 백업 파일이 각각 자체 디렉터리(gzip_backup1, gzip_backup2 등)에 들어 있다고 가정해봅시다. 이 경우 gzip_backup1 폴더의 파일에서 복원하려면 backups/gzip_backup1의 접두사를 지정합니다.

  6. 엔진 옵션(Engine options)에서 다음을 수행합니다.

    1. 엔진 유형(Engine type)에서 MySQL을 선택합니다.

    2. 소스 엔진 버전(Source engine version)에서 소스 데이터베이스의 MySQL 메이저 버전을 선택합니다.

    3. 버전(Version)의 경우 AWS 리전에서 MySQL 메이저 버전의 기본 마이너 버전을 선택합니다.

      AWS Management Console에서 기본 마이너 버전만 사용할 수 있습니다. 가져온 후 DB 인스턴스를 업그레이드할 수 있습니다.

  7. IAM 역할(IAM role)에서 기존 IAM 역할을 선택할 수 있습니다.

  8. (선택 사항) 또는 [새 역할 생성(Create a new role)]을 선택하고 [IAM 역할 이름(IAM role name)]을 입력하여 새 IAM 역할이 생성되도록 할 수도 있습니다.

  9. DB 인스턴스 정보를 지정합니다. 각 설정에 대한 자세한 내용은 DB 인스턴스에 대한 설정 단원을 참조하십시오.

    참고

    새 DB 인스턴스에 충분한 메모리를 할당해야 복원 작업이 성공할 수 있습니다.

    스토리지 Auto Scaling 활성화(Enable storage autoscaling)를 선택하여 향후 자동 확장을 허용할 수도 있습니다.

  10. 필요에 따라 추가 설정을 선택합니다.

  11. 데이터베이스 생성을 선택합니다.

AWS CLI를 사용하여 Amazon S3에서 데이터를 새 MySQL DB 인스턴스로 가져오려면 다음 파라미터를 사용하여 restore-db-instance-from-s3 명령을 호출합니다. 각 설정에 대한 자세한 내용은 DB 인스턴스에 대한 설정 단원을 참조하십시오.

참고

새 DB 인스턴스에 충분한 메모리를 할당해야 복원 작업이 성공할 수 있습니다.

또한 --max-allocated-storage 파라미터를 사용하여 스토리지 Auto Scaling을 활성화하고 향후 자동 확장을 허용할 수도 있습니다.

  • --allocated-storage

  • --db-instance-identifier

  • --db-instance-class

  • --engine

  • --master-username

  • --manage-master-user-password

  • --s3-bucket-name

  • --s3-ingestion-role-arn

  • --s3-prefix

  • --source-engine

  • --source-engine-version

Linux, macOS 또는 Unix 대상:

aws rds restore-db-instance-from-s3 \ --allocated-storage 250 \ --db-instance-identifier myidentifier \ --db-instance-class db.m5.large \ --engine mysql \ --master-username admin \ --manage-master-user-password \ --s3-bucket-name mybucket \ --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename \ --s3-prefix bucketprefix \ --source-engine mysql \ --source-engine-version 8.0.32 \ --max-allocated-storage 1000

Windows의 경우:

aws rds restore-db-instance-from-s3 ^ --allocated-storage 250 ^ --db-instance-identifier myidentifier ^ --db-instance-class db.m5.large ^ --engine mysql ^ --master-username admin ^ --manage-master-user-password ^ --s3-bucket-name mybucket ^ --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename ^ --s3-prefix bucketprefix ^ --source-engine mysql ^ --source-engine-version 8.0.32 ^ --max-allocated-storage 1000

Amazon RDS API를 사용하여 Amazon S3에서 새 MySQL DB 인스턴스로 데이터를 가져오려면 RestoreDBInstanceFromS3 작업을 호출하세요.