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 インスタンスクラスでサポートされていません。ただし、1 つの DB インスタンスクラスに復元し、後で別の DB インスタンスクラスを変更できます。インスタンスクラスの詳細については、「DB インスタンスクラスのハードウェア仕様」を参照してください。

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

  • データベースを復元すると、バックアップがコピーされ、DB インスタンスで抽出されます。そのため、バックアップサイズとディスク上の元のデータベースサイズの合計以上のストレージ領域を DB インスタンス用にプロビジョニングします。

  • Amazon RDS では、Amazon S3 バケットにアップロードするファイルの数が百万までに制限されます。データベースのバックアップデータ (すべての完全および増分バックアップを含む) が百万ファイルを超える場合は、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" を使用するデータファイル 1 つのみで設定する必要があります。2 つのデータファイルを持つデータベースや名前が異なるデータファイルを持つデータベースは、この方法では移行できません。

    "innodb_data_file_path=ibdata1:50M; ibdata2:50M:autoextend""innodb_data_file_path=ibdata01:50M:autoextend" などのファイル名は使用できません。

  • 復元されたデータベースの最大サイズは、サポートされているデータベース最大サイズからバックアップのサイズを引いたものです。したがって、サポートされている最大データベースサイズが 64 TiB で、バックアップのサイズが 30 TiB の場合、以下の例のように、復元されたデータベースの最大サイズは 34 TiB です。

    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 は、「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 - 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)

注記

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 ロールを自動で作成する場合は、「コンソール」の手順に従ってください。

信頼ポリシーとアクセス権限ポリシーを使用するには、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 インスタンスにデータをインポートする

AWS Management Console、AWS CLI、または RDS API を使用して、Amazon S3 から新しい MySQL DB インスタンスにデータをインポートできます。

Amazon S3 から新しい MySQL DB インスタンスにデータをインポートするには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

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

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

  4. [S3 から復元する] を選択します。

    [S3 から復元してデータベースを作成する] ページが表示されます。

    
                                S3 から DB インスタンスを復元する詳細を指定するページ
  5. S3 送信先

    1. バックアップを含む S3 バケットを選択します。

    2. (オプション) [S3 フォルダパスプレフィックス] で、Amazon S3 バケットに保存されているファイルのファイルパスのプレフィックスを入力します。

      プレフィックスを指定しない場合、RDS は S3 バケットのルートフォルダにあるすべてのファイルとフォルダを使用して DB インスタンスを作成します。プレフィックスを指定すると、RDS はファイルのパスが指定されたプレフィックスで始まる S3 バケットのファイルとフォルダを使用して DB インスタンスを作成します。

      例えば、複数のバックアップファイルのセットを S3 のサブフォルダ (backup) 内に保存し、各セットは独自のディレクトリ (gzip_backup1、gzip_backup2 など) 内にあるとします。この場合、プレフィックス backups/gzip_backup1 を指定して、gzip_backup1 フォルダのファイルから復元することができます。

  6. [エンジンオプション]で

    1. [エンジンタイプ]は[MySQL]を選択します。

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

    3. [Version] (バージョン) では、AWS リージョン の MySQL メジャーバージョンにおけるデフォルトのマイナーバージョンを選択します。

      AWS Management Console では、デフォルトのマイナーバージョンのみを使用できます。DB インスタンスは、インポート後にアップグレードできます。

  7. IAM ロールでは、既存の IAM ロールを選択します。

  8. (オプション) [新しいロールの作成] を選択し、IAM ロール名を入力して、新しい IAM ロールを作成することもできます。

  9. DB インスタンス情報を指定します。各設定の詳細については、「DB インスタンスの設定」を参照してください。

    注記

    復元を成功させるためには、新しい DB インスタンスに十分なメモリを必ず割り当ててください。

    [ストレージのオートスケーリングを有効にする] を選択して、将来の拡張を自動的に実行することもできます。

  10. 必要に応じて、追加の設定を選択します。

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

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

注記

復元を成功させるためには、新しい DB インスタンスに十分なメモリを必ず割り当ててください。

--max-allocated-storageパラメータを使用して、ストレージのオートスケーリングを有効にし、将来の拡張を自動的に実行することもできます。

  • --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 オペレーションンを呼び出します。