Amazon RDS for MySQL DB インスタンスへのバックアップの復元
Amazon RDS では、バックアップファイルを使用して MySQL データベースをインポートできます。データベースのバックアップを作成して Amazon S3 に保存し、MySQL を実行する新しい Amazon RDS DB インスタンスにバックアップファイルを復元できます。
このセクションで説明するシナリオでは、オンプレミスデータベースのバックアップを復元します。データベースがアクセス可能であれば、この手法は Amazon EC2 または AWS 以外のクラウドサービスなど、他の場所のデータベースに使用できます。
サポートされるシナリオは、次の図に示すとおりです。
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 から 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
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 を使用してデータベースを復元する場合、「コンソール」の手順に従って、RDS にこの新しい IAM ロールを作成させることをお勧めします。
Amazon S3 からデータベースをインポートするための新しい IAM ロールを手動で作成するには、Amazon RDS から Amazon S3 バケットにアクセス権限を委任するロールを作成します。IAM ロールを作成したら、信頼ポリシーとアクセス権限ポリシーをアタッチします。バックアップファイルを Amazon S3 からインポートするには、以下の例のような信頼ポリシーとアクセス許可ポリシーを使用します。ロールの作成の詳細については、「AWS のサービスにアクセス許可を委任するロールの作成」を参照してください。
信頼ポリシーとアクセス権限ポリシーを使用するには、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 ユーザーのアクセス許可
次の例で、iam_user_id
を独自の値に置き換えます。
{ "Version":"2012-10-17", "Statement": [ { "Sid":"AllowS3AccessRole", "Effect":"Allow", "Action":"iam:PassRole", "Resource":"arn:aws:iam::
iam_user_id
:role/S3Access" } ] }
例 Amazon S3 からインポートするためのアクセス許可ポリシー — ロールのアクセス許可
次の例で、amzn-s3-demo-bucket
と prefix
を独自の値に置き換えます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket
/prefix
*" }, { // If your bucket is encrypted, include the following permission. This permission allows decryption of your AWS KMS key. "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "arn:aws:kms:region
:customer_id
:key/key_id
*" ] } ] }
注記
ファイル名プレフィックスを含める場合は、プレフィックスの後にアスタリスク (*) を含めます。プレフィックスを指定しない場合は、アスタリスクのみを指定します。
Amazon S3 から新しい MySQL DB インスタンスにデータをインポートする
AWS Management Console、AWS CLI、または RDS API を使用して、Amazon S3 から新しい MySQL DB インスタンスにデータをインポートできます。
Amazon S3 から新しい MySQL DB インスタンスにデータをインポートするには
-
AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/
を開きます。 -
Amazon RDS コンソールの右上隅で、DB インスタンスを作成する AWS リージョン を選択します。データベースバックアップを含む Amazon S3 バケットと同じ AWS リージョン を選択します。
-
ナビゲーションペインで、[データベース] を選択します。
-
[S3 から復元する] を選択します。
[S3 から復元してデータベースを作成する] ページが表示されます。
-
S3 送信先で
-
バックアップを含む S3 バケットを選択します。
-
(オプション) [S3 プレフィックス] で、Amazon S3 バケットに保存されているファイルのファイルパスのプレフィックスを入力します。
プレフィックスを指定しない場合、RDS は S3 バケットのルートフォルダにあるすべてのファイルとフォルダを使用して DB インスタンスを作成します。プレフィックスを指定すると、RDS はファイルのパスが指定されたプレフィックスで始まる S3 バケットのファイルとフォルダを使用して DB インスタンスを作成します。
例えば、複数のバックアップファイルのセットを S3 のサブフォルダ (backup) 内に保存し、各セットは独自のディレクトリ (gzip_backup1、gzip_backup2 など) 内にあるとします。この場合、プレフィックス backups/gzip_backup1 を指定して、gzip_backup1 フォルダのファイルから復元することができます。
-
-
[エンジンオプション]で
-
[エンジンタイプ]は[MySQL]を選択します。
-
[ソースエンジンバージョン]では、ソースデータベースの MySQL メジャーバージョンを選択します。
-
[エンジンバージョン] では、AWS リージョン の MySQL メジャーバージョンのデフォルトのマイナーバージョンを選択します。
AWS Management Console では、デフォルトのマイナーバージョンのみを使用できます。DB インスタンスは、インポート後にアップグレードできます。
-
-
IAM ロールでは、Amazon RDS が Amazon S3 バケットにアクセスできるように、必要な信頼ポリシーとアクセス許可ポリシーを持つ IAM ロールを作成または選択します。次のいずれかのアクションを実行します。
(推奨) [新しいロールの作成] を選択し、IAM ロール名を入力します。このオプションを使用すると、RDS は信頼ポリシーとアクセス許可ポリシーを使用してロールを自動的に作成します。
既存の IAM ロールを選択します。このロールが IAM ロールの手動作成 のすべての基準を満たしていることを確認します。
-
DB インスタンス情報を指定します。各設定の詳細については、「DB インスタンスの設定」を参照してください。
注記
復元を成功させるためには、新しい DB インスタンスに十分なメモリを必ず割り当ててください。
[ストレージのオートスケーリングを有効にする] を選択して、将来の拡張を自動的に実行することもできます。
-
必要に応じて、追加の設定を選択します。
-
[データベースの作成] を選択します。
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-identifiermyidentifier
\ --db-instance-classdb.m5.large
\ --enginemysql
\ --master-usernameadmin
\ --manage-master-user-password \ --s3-bucket-nameamzn-s3-demo-bucket
\ --s3-ingestion-role-arnarn:aws:iam::account-number:role/rolename
\ --s3-prefixbucketprefix
\ --source-enginemysql
\ --source-engine-version8.0.32
\ --max-allocated-storage1000
Windows の場合:
aws rds restore-db-instance-from-s3 ^ --allocated-storage
250
^ --db-instance-identifiermyidentifier
^ --db-instance-classdb.m5.large
^ --enginemysql
^ --master-usernameadmin
^ --manage-master-user-password ^ --s3-bucket-nameamzn-s3-demo-bucket
^ --s3-ingestion-role-arnarn:aws:iam::account-number:role/rolename
^ --s3-prefixbucketprefix
^ --source-enginemysql
^ --source-engine-version8.0.32
^ --max-allocated-storage1000
Amazon RDS API を使用して Amazon S3 から新しい MySQL DB インスタンスにデータをインポートするには、RestoreDBInstanceFromS3 オペレーションンを呼び出します。
Amazon S3 から Amazon RDS へのバックアップファイルのインポートに関する制限と推奨事項
以下に、Amazon S3 からのバックアップファイルのインポートに関する制限と推奨事項を示します。
-
データは新しい DB インスタンスにのみインポートでき、既存の DB インスタンスにはできません。
-
オンプレミスデータベースのバックアップを作成するには、Percona XtraBackup を使用する必要があります。
-
DB スナップショットエクスポートから Amazon S3 にデータをインポートすることはできません。
-
デフォルトの MySQL データディレクトリ外で定義されたテーブルを含むソースデータベースから移行することはできません。
-
データを AWS リージョン の MySQL メジャーバージョンのデフォルトのマイナーバージョンにインポートする必要があります。例えば、メジャーバージョンが MySQL 8.0 で、AWS リージョン のデフォルトのマイナーバージョンが 8.0.35 である場合、データを MySQL バージョン 8.0.35 の 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 ストレージ」を参照してください。