Amazon Relational Database Service
ユーザーガイド (API バージョン 2014-10-31)

Amazon RDS MySQL DB インスタンスへのバックアップの復元

Amazon RDS では、バックアップファイルを使用して MySQL データベースをインポートできます。オンプレミスデータベースのバックアップを作成して Amazon S3 に保存し、MySQL を実行する新しい Amazon RDS DB インスタンスにバックアップファイルを復元できます。

サポートされるシナリオは、次の図に示すとおりです。


            S3 アーキテクチャからバックアップファイルをインポートする MySQL

Amazon S3 からのバックアップファイルのインポートは MySQL バージョン 5.6 および 5.7 でサポートされています。Amazon S3 からのバックアップファイルのインポートは、すべての AWS リージョンで利用できます。

バックアップファイルの作成、コピー、復元時にデータベースをオフラインにできる場合、データベースを Amazon RDS にインポートする方法としてバックアップファイルの使用をお勧めします。オンプレミスデータベースをオフラインにできない場合は、このトピックで説明しているように Amazon S3 経由で Amazon RDS に移行した後にバイナリログのレプリケーションを使用してデータベースを更新できます。詳細については、「Amazon RDS の外部で実行される MySQL または MariaDB インスタンスとのレプリケーション」を参照してください。また AWS Database Migration Service を使用してデータベースを Amazon RDS に移行することもできます。詳細については、「AWS Database Migration Service とは」を参照してください。

Amazon S3 から Amazon RDS へのバックアップファイルのインポートに関する制限と推奨事項

以下に、Amazon S3 からのバックアップファイルのインポートに関する制限と推奨事項を示します。

  • データは新しい DB インスタンスにのみインポートでき、既存の DB インスタンスにはできません。

  • オンプレミスデータベースのバックアップを作成するには、Percona XtraBackup を使用する必要があります。

  • デフォルトの MySQL データディレクトリ外で定義されたテーブルを含むソースデータベースから移行することはできません。

  • MySQL 5.5 または 8.0 データベースはインポートできません。

  • Amazon RDS MySQL 5.7 または 8.0 データベースにオンプレミスの MySQL 5.6 データベースをインポートすることはできません。インポートが完了した後 DB インスタンスをアップグレードできます。

  • 6 TB を超えるサイズのデータベースを復元することはできません。

  • 暗号化したソース データベースから復元することはできませんが、暗号化された Amazon RDS DB インスタンスには復元できます。

  • Amazon RDS DB インスタンスとは異なる AWS リージョンで Amazon S3 バケットから復元することはできません。

  • Amazon S3 からのインポートは、db.t2.micro DB インスタンスクラスでサポートされていません。ただし、1 つの DB インスタンスクラスに復元した後、後でインスタンスクラスを変更できます。インスタンスクラスの詳細については、「利用可能なすべての DB インスタンスクラスのハードウェア仕様」を参照してください。

  • Amazon S3 では、Amazon S3 バケットにアップロードするファイルのサイズが 5 TB に制限されます。バックアップファイルが 5 TB を超える場合は、バックアップファイルを小さいファイルに分割する必要があります。

  • Amazon RDS では、Amazon S3 バケットにアップロードするファイルの数が百万までに制限されます。データベースのバックアップデータ (すべての完全および増分バックアップを含む) が百万ファイルを超える場合は、tarball (.tar.gz) ファイルを使用して完全および増分バックアップファイルを Amazon S3 バケットに保存します。

  • ユーザーアカウントは自動的にインポートされません。ソースデータベースからのユーザーアカウントを保存し、後でそれらを新しい DB インスタンスに追加します。

  • 関数は自動的にインポートされません。ソースデータベースからの関数を保存し、後でそれらを新しい DB インスタンスに追加します。

  • ストアドプロシージャは自動的にインポートされません。ソースデータベースからのストアドプロシージャを保存し、後でそれらを新しい DB インスタンスに追加します。

  • タイムゾーン情報は自動的にインポートされません。ソースデータベースのタイムゾーン情報を記録し、新しい DB インスタンスのタイムゾーンを設定します。詳細については、「MySQL DB インスタンスのローカルタイムゾーン」を参照してください。

  • 後方移行はメジャーバージョンとマイナーバージョン両方でサポートされません。たとえば、バージョン 5.7 からバージョン 5.6 に移行することはできません。また、バージョン 5.6.39 からバージョン 5.6.37 に移行することもできません。

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 マネジメントコンソール を使用してデータベースを復元するときに、ウィザードでアカウントに新しい IAM ロールを自動的に作成することもできます。新しい IAM ロールを手動で作成するか、信頼ポリシーとアクセス許可ポリシーを既存の IAM ロールにアタッチする場合は、「IAM ロールの手動作成」を参照してください。新しい IAM ロールを自動で作成する場合は、「コンソール」の手順に従ってください。

データベースバックアップの作成

Percona XtraBackup ソフトウェアを使用してバックアップを作成します。Percona XtraBackup は、「Download Percona XtraBackup」からインストールできます。

注記

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 - Documentation」および「The 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>

バックアップを 1 つのファイル (必要に応じて分割できます) に圧縮する場合、以下のいずれかの形式を使用してバックアップを保存できます。

  • Gzip (.gz)

  • tar (.tar)

  • Percona xbstream (.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

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 マネジメントコンソール を使用してデータベースを復元するときに、ウィザードで新しい IAM ロールを自動的に作成することもできます。新しい IAM ロールを自動で作成する場合は、「コンソール」の手順に従ってください。

Amazon S3 からデータベースをインポートするための新しい IAM ロールを手動で作成するには、Amazon RDS から Amazon S3 バケットにアクセス権限を委任するロールを作成します。IAM ロールを作成したら、信頼ポリシーとアクセス権限ポリシーをアタッチします。バックアップファイルを Amazon S3 からインポートするには、以下の例のような信頼ポリシーとアクセス許可ポリシーを使用します。ロールの作成の詳細については、「AWS サービスにアクセス許可を委任するロールの作成」を参照してください。

また、AWS マネジメントコンソール を使用してデータベースを復元するときに、ウィザードで新しい IAM ロールを自動的に作成することもできます。新しい IAM ロールを自動で作成する場合は、「コンソール」の手順に従ってください。

信頼ポリシーとアクセス権限ポリシーを使用するには、Amazon リソースネーム (ARN) を指定する必要があります。ARN 形式の詳細については、「Amazon リソースネーム (ARN) と 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 インスタンスにデータをインポートする

Amazon S3 から新しい MySQL DB インスタンスにデータをインポートするには、AWS マネジメントコンソール、AWS CLI、または RDS API を使用します。

コンソール

Amazon S3 から新しい MySQL DB インスタンスにデータをインポートするには

  1. AWS マネジメントコンソールにサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. Amazon RDS コンソールの右上隅で、DB インスタンスを作成する AWS リージョンを選択します。データベース バックアップを含む Amazon S3 バケットと同じ AWS リージョンを選択します。

  3. ナビゲーションペインで、[データベース] を選択します。

  4. [Restore from S3] を選択してウィザードを起動します。

    ウィザードが起動し、[Select engine] ページが開きます。

  5. [エンジンの選択] で、[MySQL] を選択し、続いて [Next (次へ)] を選択します。

    [Specify source backup details] ページが表示されます。

    
                        ソースデータベースのバックアップの詳細を指定するページ
  6. [Specify source backup details] ページで、バックアップ情報を指定します。

    1. [Source engine] で、[mysql] を選択します。

    2. [Source engine version] では、ソースデータベースの MySQL バージョンを選択します。

    3. [S3 bucket] で、自分の Amazon S3 バケットを選択します。

    4. (オプション) [S3 folder path prefix (S3 フォルダパスプレフィックス)] で、Amazon S3 バケットに保存されているファイルのファイルパスのプレフィックスを入力します。プレフィックスを指定しない場合、RDS は S3 バケットのルートフォルダにあるすべてのファイルとフォルダを使用して DB インスタンスを作成します。プレフィックスを指定すると、RDS はファイルのパスが指定されたプレフィックスで始まる S3 バケットのファイルとフォルダを使用して DB インスタンスを作成します。たとえば、複数のバックアップファイルのセットを S3 のサブフォルダ (backup) 内に保存し、各セットは独自のディレクトリ (gzip_backup1、gzip_backup2 など) 内にあるとします。この場合、プレフィックス backups/gzip_backup1 を指定して、gzip_backup1 フォルダのファイルから復元することができます。

    5. [Create a new role] で [Yes] を選択し、アカウントに新しい IAM ロールを自動で作成するか、[No] を選択して既存の IAM ロールを選択します。

    6. [IAM ロール] で、既存の IAM を選択するか、[IAM ロール名] で、新しい IAM ロールの名前を指定します。新しい IAM ロールを作成するには、[新しいロールの作成] で [Yes] を選択します。

  7. [次へ] を選択して次に進みます。[DB 詳細の指定] ページが表示されます。

    [DB 詳細の指定] ページで、DB インスタンスの情報を指定します。各設定の詳細については、「MySQL DB インスタンスの設定」を参照してください。

    注記

    復元を成功させるために、新しい DB インスタンスには十分なメモリを割り当ててください。また将来的なの拡大のために追加のメモリを割り当てることもできます。

  8. [Next ] を選択して続行します。[Configure advanced settings] ページが表示されます。

    Amazon RDS で DB インスタンスを起動するために必要な追加情報を入力します。各設定の詳細については、「MySQL DB インスタンスの設定」を参照してください。

  9. [データベースの作成] を選択します。

AWS CLI

AWS CLI を使用してデータを Amazon S3 から新しい MySQL DB インスタンスにインポートするには、以下のパラメータを指定して restore-db-instance-from-s3 コマンドを呼び出します。各設定の詳細については、「MySQL DB インスタンスの設定」を参照してください。

注記

復元を成功させるために、新しい DB インスタンスには十分なメモリを割り当ててください。また将来的なの拡大のために追加のメモリを割り当てることもできます。

  • --allocated-storage

  • --db-instance-identifier

  • --db-instance-class

  • --engine

  • --master-user-name

  • --master-user-password

  • --s3-bucket-name

  • --s3-ingestion-role-arn

  • --s3-prefix

  • --source-engine

  • --source-engine-version

Linux、OS X、Unix の場合:

aws rds restore-db-instance-from-s3 \ --allocated-storage 250 \ --db-instance-identifier myidentifier \ --db-instance-class db.m4.large \ --engine mysql \ --master-user-name masterawsuser \ --master-user-password masteruserpassword \ --s3-bucket-name mybucket \ --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename \ --s3-prefix bucketprefix \ --source-engine mysql \ --source-engine-version 5.6.40

Windows の場合:

aws rds restore-db-instance-from-s3 ^ --allocated-storage 250 ^ --db-instance-identifier myidentifier ^ --db-instance-class db.m4.large ^ --engine mysql ^ --master-user-name masterawsuser ^ --master-user-password masteruserpassword ^ --s3-bucket-name mybucket ^ --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename ^ --s3-prefix bucketprefix ^ --source-engine mysql ^ --source-engine-version 5.6.40
RDS API

Amazon RDS API を使用して Amazon S3 から新しい MySQL DB インスタンスにデータをインポートするには、RestoreDBInstanceFromS3 アクションを呼び出します。