Amazon RDS for MySQL DB インスタンスへのバックアップの復元 - Amazon Relational Database Service

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

Amazon RDS では、バックアップファイルを使用して MySQL データベースをインポートできます。データベースのバックアップを作成して、そのバックアップファイルを Amazon S3 に保存し、その後、MySQL を実行する新しい Amazon RDS DB インスタンスにバックアップファイルを復元できます。Amazon RDS は、すべての AWS リージョンで Amazon S3 からのバックアップファイルのインポートをサポートしています。

このセクションで説明するシナリオでは、オンプレミスデータベースのバックアップを復元します。データベースがアクセス可能であれば、この手法は Amazon EC2 や他のクラウドサービスなど、他の場所にあるデータベースにも使用できます。

次の図は、サポートされるシナリオを示しています。

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

バックアップファイルの作成、コピー、復元時にオンプレミスデータベースをオフラインにできる場合、データベースを Amazon RDS にインポートするには、バックアップファイルの使用をお勧めします。データベースをオフラインにできない場合は、次のいずれかの方法を使用できます。

Amazon S3 から Amazon RDS にバックアップファイルをインポートするための設定の概要

Amazon S3 から Amazon RDS にバックアップファイルをインポートするには、次のコンポーネントが必要です。

  • バックアップファイルを保存する Amazon S3 バケット。

    Amazon S3 バケットが既にある場合は、そのバケットを使用できます。Amazon S3 バケットがない場合は、新しいバケットを作成します。詳細については、「バケットの作成」を参照してください。

  • Percona XtraBackup で作成されたオンプレミスデータベースのバックアップ。

    詳細については、「データベースバックアップの作成」を参照してください。

  • Amazon RDS から S3 バケットへのアクセスを許可する AWS Identity and Access Management (IAM) ロール。

    IAM ロールが既にある場合は、そのロールを使用して信頼ポリシーとアクセス許可ポリシーをアタッチできます。詳細については、「IAM ロールの手動作成」を参照してください。

    IAM ロールがない場合は、次の 2 つのオプションがあります。

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

Percona XtraBackup ソフトウェアを使用してバックアップを作成します。Percona XtraBackup の最新バージョンの使用をお勧めします。Percona XtraBackup は、Percona ウェブサイトのソフトウェアのダウンロードからインストールできます。

警告

データベースのバックアップを作成する際、XtraBackup では認証情報をxtrabackup_info ファイルに保存することがあります。xtrabackup_info ファイルの tool_command 設定に機密情報が含まれていないことを確認してください。

使用する Percona XtraBackup のバージョンは、バックアップする MySQL のバージョンによって異なります。

  • MySQL 8.4 — Percona XtraBackup バージョン 8.4 を使用します。

  • MySQL 8.0 — Percona XtraBackup バージョン 8.0 を使用します。

    注記

    Percona XtraBackup 8.0.12 以降のバージョンでは、MySQL 8.0 のすべてのバージョンの移行がサポートされています。RDS for MySQL 8.0.32 以降に移行する場合は、Percona XtraBackup 8.0.12 以降を使用する必要があります。

  • MySQL 5.7 — Percona XtraBackup バージョン 2.4 を使用します。

Percona XtraBackup を使用して MySQL データベースファイルの完全なバックアップを作成できます。または、Percona XtraBackup を使用して MySQL データベースファイルをバックアップ済みである場合は、既存の完全および増分バックアップディレクトリおよびファイルをアップロードできます。

Percona XtraBackup を使用したデータベースのバックアップの詳細については、Percona ウェブサイトの「Percona XtraBackup - Documentation」を参照してください。

Percona XtraBackup での完全バックアップの作成

Amazon RDS が 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 つのファイル (必要に応じて後で複数のファイルに分割できます) に圧縮する場合、MySQL のバージョンに応じて、以下のいずれかの形式でバックアップを保存できます。

  • Gzip (.gz) – MySQL 5.7 以前のバージョン用

  • tar (.tar) – MySQL 5.7 以前のバージョン用

  • Percona xbstream (.xbstream) – すべての MySQL バージョン用

注記

Percona XtraBackUp 8.0 以降では、圧縮には Percona xbstream のみがサポートされています。

MySQL 5.7 以前のバージョン

次のコマンドでは、複数の Gzip ファイルに分割された MySQL データベースのバックアップを作成します。値を自分の情報に置き換えます。

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

MySQL 5.7 以前のバージョン

次のコマンドでは、複数の tar ファイルに分割された MySQL データベースのバックアップを作成します。値を自分の情報に置き換えます。

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

MySQL のすべてのバージョン

例えば、次のコマンドでは、複数の 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 を使用した増分バックアップの作成の詳細については、「Create an 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

IAM ロールの手動作成

IAM ロールがない場合、手動で新しいロールを作成できます。ただし、AWS Management Console を使用してデータベースを復元する場合、RDS にこの新しい IAM ロールを作成させることをお勧めします。Amazon RDS でこのロールを作成するには、「Amazon S3 から新しい MySQL DB インスタンスにデータをインポートする」セクションの手順に従います。

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-bucketprefix を独自の値に置き換えます。

{ "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 インスタンスにデータをインポートするには
  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 インスタンスを復元するための詳細を指定する [S3 から復元することによってデータベースを作成する] ページ。
  5. S3 ソースで:

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

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

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

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

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

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

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

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

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

  7. IAM ロールでは、Amazon RDS が Amazon S3 バケットにアクセスできるように、必要な信頼ポリシーとアクセス許可ポリシーを持つ IAM ロールを作成または選択します。次のいずれかのアクションを実行します。

    • (推奨) [新しいロールの作成] を選択し、IAM ロール名を入力します。このオプションを使用すると、Amazon RDS は信頼ポリシーとアクセス許可ポリシーを使用してロールを自動的に作成します。

    • 既存の IAM ロールを選択します。このロールが IAM ロールの手動作成 のすべての基準を満たしていることを確認します。

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

    注記

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

    将来の拡張を自動的に実行するには、[追加のストレージ設定] で、[ストレージの自動スケーリングを有効にする] を選択します。

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

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

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 my_identifier \ --db-instance-class db.m5.large \ --engine mysql \ --master-username admin \ --manage-master-user-password \ --s3-bucket-name amzn-s3-demo-bucket \ --s3-ingestion-role-arn arn:aws:iam::account-number:role/rolename \ --s3-prefix bucket_prefix \ --source-engine my_sql \ --source-engine-version 8.0.32 \ --max-allocated-storage 1000

Windows の場合:

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

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

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

Amazon S3 から RDS for MySQL DB インスタンスへのバックアップファイルのインポートには、次の制限と考慮事項が適用されます。

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

  • Percona XtraBackup を使用してデータを Amazon S3 にバックアップする必要があります。詳細については、「データベースバックアップの作成」を参照してください。

  • Amazon S3 バケットと RDS for MySQL DB インスタンスは同じ AWS リージョンに存在する必要があります。

  • 次のソースからは復元することはできません。

    • Amazon S3 にエクスポートされた DB インスタンスのスナップショット。また、DB インスタンススナップショットエクスポートから、Amazon S3 バケットにデータを移行することもできません。

    • 暗号化されたソースデータベース。ただし、移行するデータを暗号化することはできます。移行プロセス中にデータを非暗号化のまま維持することもできます。

    • MySQL 5.5 または 5.6 データベース。

  • RDS for MySQL では、mysql schemacompression_dictionary* テーブルが含まれる可能性があるため、Percona Server for MySQL をソースデータベースとしてサポートされていません。

  • RDS for MySQL では、メジャーバージョンとマイナーバージョンのどちらでも後方移行はサポートされていません。例えば、MySQL バージョン 8.0 から RDS for MySQL 5.7 に移行することはできません。また、MySQL バージョン 8.0.32 から RDS for MySQL バージョン 8.0.26 に移行することもできません。

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

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

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

  • 各 DB インスタンスに管理サービスを提供するために、Amazon RDS では DB インスタンスの作成時に rdsadmin ユーザーが作成されます。rdsamin は Amazon RDS の予約ユーザーであるため、以下の制限が適用されます。

  • Amazon RDS は、mysql スキーマ内のユーザーが作成したテーブルを移行しません。

  • innodb_data_file_path パラメータを、デフォルトのデータファイル名 ibdata1:12M:autoextend を使用するデータファイル 1 つのみで設定する必要があります。この方法を使用すると、2 つのデータファイルを持つデータベースや名前が異なるデータファイルを持つデータベースを移行できます。

    次の例は、Amazon RDS で許可されていないファイル名です。

    • innodb_data_file_path=ibdata1:50M

    • ibdata2:50M:autoextend

    • innodb_data_file_path=ibdata01:50M:autoextend

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

  • この方法を使用した非圧縮バックアップでサポートされる最大サイズは、64 TiB に制限されています。圧縮バックアップの場合、圧縮解除に必要なスペースを考慮してこの制限は小さくなります。このような場合、サポートされる最大バックアップサイズは (64 TiB - compressed backup size) です。

    RDS for MySQL でサポートされている最大データベースサイズについては、「汎用 SSD ストレージ」および「プロビジョンド IOPS SSD ストレージ」を参照してください。

  • Amazon RDS は MySQL やその他の外部コンポーネントやプラグインのインポートをサポートしていません。

  • Amazon RDS は、データベースからすべてを復元するわけではありません。ソース MySQL システムデータベースからデータベーススキーマと以下の項目の値を保存してから、作成後に復元された RDS for MySQL DB インスタンスに追加することをお勧めします。

    • ユーザーアカウント

    • 関数

    • ストアドプロシージャ

    • タイムゾーン情報。タイムゾーン情報は、RDS for MySQL DB インスタンスのローカルオペレーティングシステムからロードされます。詳細については、「MySQL DB インスタンスのローカルタイムゾーン」を参照してください。

定義者として 'rdsamin'@'localhost' を使用して保存されたオブジェクト

Amazon RDS では、'rdsadmin'@'localhost' が定義者である関数、プロシージャ、ビュー、イベント、トリガーは、インポートされません。

ソース MySQL データベースで以下の SQL スクリプトを使用すると、サポートされていない定義子を持つストアド オブジェクトを一覧表示できます。

-- This SQL query lists routines with `rdsadmin`@`localhost` as the definer. SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM information_schema.routines WHERE definer = 'rdsadmin@localhost'; -- This SQL query lists triggers with `rdsadmin`@`localhost` as the definer. SELECT TRIGGER_SCHEMA, TRIGGER_NAME, DEFINER FROM information_schema.triggers WHERE DEFINER = 'rdsadmin@localhost'; -- This SQL query lists events with `rdsadmin`@`localhost` as the definer. SELECT EVENT_SCHEMA, EVENT_NAME FROM information_schema.events WHERE DEFINER = 'rdsadmin@localhost'; -- This SQL query lists views with `rdsadmin`@`localhost` as the definer. SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.views WHERE DEFINER = 'rdsadmin@localhost';

サポートされていない権限を持つユーザーアカウント

RDS for MySQL でサポートされていない権限を持つユーザーアカウントは、サポートされていない権限なしでもインポートされます。サポートされている権限のリストについては、「RDS for MySQL のロールベースの権限モデル」を参照してください。

ソースデータベースで次の SQL クエリを実行すると、サポートされていない権限を持つユーザーアカウントを一覧表示できます。

SELECT user, host FROM mysql.user WHERE Shutdown_priv = 'y' OR File_priv = 'y' OR Super_priv = 'y' OR Create_tablespace_priv = 'y';