Aurora への RDS for MySQL スナップショットの移行 - Amazon Aurora

Aurora への RDS for MySQL スナップショットの移行

RDS for MySQL DB インスタンスの DB スナップショットを移行して、Aurora MySQL DB クラスターを作成することができます。新しい Aurora MySQL DB クラスターには、元の RDS for MySQL DB インスタンスのデータが入力されます。DB スナップショットは、Aurora MySQL と互換性がある MySQL バージョンを実行している Amazon RDS DB インスタンスから作成されたものである必要があります。

手動で作成された DB スナップショットと自動的に作成された DB スナップショットのどちらも移行できます。DB クラスターが作成された後、オプションの Aurora レプリカを作成できます。

注記

ソース RDS for MySQL DB インスタンスの Aurora リードレプリカを作成することにより、RDS for MySQL DB インスタンスを Aurora MySQL DB クラスターに移行することもできます。詳細については、「Aurora リードレプリカを使用した、RDS for MySQL DB インスタンスから Amazon Aurora MySQL DB クラスターへのデータの移行」を参照してください。

8.0.11、8.0.13、8.0.15 などの一部の古い MySQL 8.0 バージョンからは Aurora MySQL バージョン 3.05 以上に移行できません。移行する前に MySQL バージョン 8.0.28 にアップグレードすることをお勧めします。

実行する必要がある一般的なステップは次のとおりです。

  1. Aurora MySQL DB クラスターをプロビジョニングするための容量を決定します。詳細については、「必要な容量」を参照してください。

  2. コンソールを使用して、Amazon RDS MySQL インスタンスが置かれている AWS リージョン内にスナップショットを作成します。DB スナップショットの作成については、「DB スナップショットの作成」を参照してください。

  3. DB スナップショットが DB クラスターと同じ AWS リージョン内にない場合は、Amazon RDS コンソールを使用して DB スナップショットをその AWS リージョンにコピーします。DB スナップショットのコピーについては、「DB スナップショットのコピー」を参照してください。

  4. コンソールを使用して DB スナップショットを移行し、元の MySQL DB インスタンスと同じデータベースを持つ Aurora MySQL DB クラスターを作成します。

警告

Amazon RDS では、各 AWS アカウントによる各 AWS リージョンへのスナップショットのコピーは 1 度に 1 つに制限されています。

必要な容量

MySQL DB インスタンスのスナップショットを Aurora MySQL DB クラスターに移行するとき、Aurora は、スナップショットのデータを移行する前に Amazon Elastic Block Store (Amazon EBS) ボリュームを使用してそのデータの書式を設定します。移行するデータの書式を設定するために追加容量が必要になる場合があります。

MyISAM テーブルではないテーブルおよび圧縮されていないテーブルのサイズは、最大 16 TB が可能です。MyISAM テーブルの場合、Aurora では、Aurora MySQL と互換性のあるテーブルに変換するために、ボリュームに追加のスペースが必要になります。圧縮されたテーブルの場合、Aurora では、圧縮されたテーブルを Aurora クラスターボリュームに保存する前に展開するため、ボリュームに追加のスペースが必要になります。追加のスペースが必要になるため、MySQL DB インスタンスから移行される MyISAM テーブルおよび圧縮テーブルのサイズが 8 TB を超えていないことを確認する必要があります。

Amazon Aurora MySQL にデータを移行するために必要な容量の削減

Amazon Aurora に移行する前にデータベーススキーマを変更することもできます。このような変更は、次のような場合に便利です。

  • 移行プロセスを迅速化したい。

  • プロビジョニングするために必要な領域の量がわからない場合。

  • データを移行しようとしたが、プロビジョニング済み領域の不足で移行が失敗した場合。

以下の変更を行うことで、データベースを Amazon Aurora に移行するプロセスを改善できます。

重要

これらの更新は、本稼働インスタンスではなく、本稼働データベースのスナップショットから復元された新しい DB インスタンスに対して実行します。その後、新しい DB インスタンスのスナップショットからデータを Aurora DB クラスターに移行することで、本稼働データベースに対するサービスの中断を回避できます。

テーブルタイプ 制限またはガイドライン

MyISAM テーブル

Aurora MySQL は InnoDB テーブルのみをサポートします。データベース内に MyISAM テーブルがある場合は、Aurora MySQL に移行する前にそれらのテーブルを変換する必要があります。移行中の MyISAM から InnoDB への変換プロセスには、追加領域が必要です。

領域不足が発生する可能性を低く抑えて移行プロセスを高速化するには、すべての MyISAM テーブルを移行前に InnoDB テーブルに変換しておきます。処理後の InnoDB テーブルのサイズは、Aurora MySQL がそのテーブルに対して必要とするサイズと同じになります。MyISAM テーブルを InnoDB に変換するには、次のコマンドを実行します。

alter table <schema>.<table_name> engine=innodb, algorithm=copy;

圧縮テーブル

Aurora MySQL では、圧縮テーブル (ROW_FORMAT=COMPRESSED を使用して作成されたテーブル) をサポートしていません。

スペースが不足する可能性を減らしたり、移行処理を高速化するには、ROW_FORMATDEFAULTCOMPACTDYNAMIC または REDUNDANT に設定して圧縮テーブルを展開します。詳細については、MySQL ドキュメントの「InnoDB 行形式」を参照してください。

既存の MySQL DB インスタンスで以下の SQL スクリプトを使用して、データベースの MyISAM テーブルまたは圧縮テーブルのリストを表示できます。

-- This script examines a MySQL database for conditions that block -- migrating the database into Amazon Aurora. -- It needs to be run from an account that has read permission for the -- INFORMATION_SCHEMA database. -- Verify that this is a supported version of MySQL. select msg as `==> Checking current version of MySQL.` from ( select 'This script should be run on MySQL version 5.6 or higher. ' + 'Earlier versions are not supported.' as msg, cast(substring_index(version(), '.', 1) as unsigned) * 100 + cast(substring_index(substring_index(version(), '.', 2), '.', -1) as unsigned) as major_minor ) as T where major_minor <> 506; -- List MyISAM and compressed tables. Include the table size. select concat(TABLE_SCHEMA, '.', TABLE_NAME) as `==> MyISAM or Compressed Tables`, round(((data_length + index_length) / 1024 / 1024), 2) "Approx size (MB)" from INFORMATION_SCHEMA.TABLES where ENGINE <> 'InnoDB' and ( -- User tables TABLE_SCHEMA not in ('mysql', 'performance_schema', 'information_schema') or -- Non-standard system tables ( TABLE_SCHEMA = 'mysql' and TABLE_NAME not in ( 'columns_priv', 'db', 'event', 'func', 'general_log', 'help_category', 'help_keyword', 'help_relation', 'help_topic', 'host', 'ndb_binlog_index', 'plugin', 'proc', 'procs_priv', 'proxies_priv', 'servers', 'slow_log', 'tables_priv', 'time_zone', 'time_zone_leap_second', 'time_zone_name', 'time_zone_transition', 'time_zone_transition_type', 'user' ) ) ) or ( -- Compressed tables ROW_FORMAT = 'Compressed' );

スクリプトでは、次の例のような出力が作成されます。この例では、MyISAM から InnoDB に変換する必要のある 2 つのテーブルを示しています。出力には、メガバイト (MB) 単位で示した各テーブルのおおよそのサイズも含まれています。

+---------------------------------+------------------+ | ==> MyISAM or Compressed Tables | Approx size (MB) | +---------------------------------+------------------+ | test.name_table | 2102.25 | | test.my_table | 65.25 | +---------------------------------+------------------+ 2 rows in set (0.01 sec)

RDS for MySQL DB スナップショットを Aurora MySQL DB クラスターに移行する

RDS for MySQL DB インスタンスの DB スナップショットを移行して、AWS Management Console または AWS CLI を使って、Aurora MySQL DB クラスターを作成することができます。新しい Aurora MySQL DB クラスターには、元の RDS for MySQL DB インスタンスのデータが入力されます。DB スナップショットの作成については、「DB スナップショットの作成」を参照してください。

DB スナップショットがデータを検索する AWS リージョン内にない場合は、DB スナップショットをその AWS リージョンにコピーします。DB スナップショットのコピーについては、「DB スナップショットのコピー」を参照してください。

AWS Management Console を使用して DB スナップショットを移行すると、DB クラスターとプライマリインスタンスの両方を作成するために必要なアクションがコンソールによって実行されます。

新しい Aurora MySQL DB クラスターが、AWS KMS key を使用して保管中に暗号化されるよう選択することもできます。

AWS Management Console を使用して MySQL DB スナップショットを移行するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. MySQL DB インスタンスまたはスナップショットから移行をスタートします。

    DB インスタンスから移行をスタートするには:

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

    2. [アクション]、[最新のスナップショットの移行] の順に選択します。

    スナップショットから移行をスタートするには:

    1. [スナップショット] を選択します。

    2. [スナップショット] ページで、Aurora MySQL DB クラスターに移行するスナップショットを選択します。

    3. [スナップショットのアクション]、[スナップショットの移行] の順に選択します。

    [データベースの移行] ページが表示されます。

  3. [データベースの移行] ページで以下の値を設定します。

    • [DB エンジンへの移行] : aurora を選択します。

    • [DB エンジンのバージョン]: Aurora MySQL DB クラスターの DB エンジンのバージョンを選択します。

    • DB インスタンスクラス: データベースに必要なストレージと容量を持つ DB インスタンスクラス (db.r3.large など) を選択します。Aurora クラスターボリュームは、データベースのデータ量が増えるにつれて自動的に増加します。Aurora クラスターボリュームは、最大 128 tebibytes (TiB) のサイズまで増やすことができます。そのため、現在のストレージ要件を満たしている DB インスタンスクラスを選択する必要があります。詳細については、「Amazon Aurora ストレージの概要」を参照してください。

    • DB インスタンス識別子: DB クラスター名を入力します。選択した AWS リージョン内で、自分のアカウントに対して一意であることが必要です。この識別子は、DB クラスター内のインスタンスのエンドポイントアドレスで使用されます。名前には、選択した AWS リージョンと DB エンジンなどを含めると理解しやすくなります (aurora-cluster1 など)。

      DB インスタンス識別子には次の制約があります。

      • 1 ~ 63 文字の英数字またはハイフンを使用する必要があります。

      • 1 字目は文字である必要があります。

      • ハイフンを、文字列の最後に使用したり、2 つ続けて使用したりすることはできません。

      • 1 つの AWS アカウント、1 つの AWS リージョンにつき、すべての DB インスタンスにおいて一意である必要があります。

    • [Virtual Private Cloud (VPC)]: 既存の VPC がある場合は、その VPC 識別子 (vpc-a464d1c1 など) を選択することで、その VPC を Aurora MySQL DB クラスターで使用できます。VPC の作成方法の詳細については、「チュートリアル: DB クラスターで使用する VPC を作成する (IPv4 専用)」を参照してください。

      または、[新しい VPC の作成] を選択し、Aurora で自動的に VPC を作成します。

    • DB サブネットグループ: 既存のサブネットグループがある場合は、そのサブネットグループ識別子 (gs-subnet-group1 など) を選択して、サブネットグループを Aurora MySQL DB クラスターで使用できます。

      または、[新しいサブネットグループを作成] を選択し、Aurora で自動的にサブネットグループを作成します。

    • Public accessibility: DB クラスターのインスタンスが VPC 内のリソースからのみアクセスできることを指定するには、[いいえ] を選択します。DB クラスターのインスタンスがパブリックネットワーク上のリソースからアクセスできることを指定するには、[はい] を選択します。デフォルトは [はい] です。

      注記

      本番稼働用の DB クラスターは、お客様のアプリケーションサーバーのみがアクセスするため、パブリックサブネット内に配置する必要がない場合があります。DB クラスターをパブリックサブネットに配置する必要がない場合は、[パブリックアクセス可能] を [いいえ] に設定します。

    • [アベイラビリティーゾーン]: Aurora MySQL DB クラスターのプライマリインスタンスをホストするアベイラビリティーゾーンを選択します。Aurora で自動的にアベイラビリティーゾーンを選択するには、[指定なし] を選択します。

    • [データベースのポート]: Aurora MySQL DB クラスターのインスタンスへの接続に使用されるデフォルトのポートを入力します。デフォルトは 3306 です。

      注記

      会社のファイアウォールで MySQL のデフォルトポートである 3306 などのデフォルトポートへのアクセスが許可されない場合があります。この場合は、会社のファイアウォールによって許可されるポート値を指定します。そのポート値を覚えておいてください。後で Aurora MySQL DB クラスターに接続するときに使用します。

    • [暗号化]: 新しい Aurora MySQL DB クラスターを保管時に暗号化するには、[暗号を有効化] を選択します。[Enable Encryption] (暗号化を有効化) を選択する場合、KMS キーを AWS KMS key 値として選択する必要があります。

      DB スナップショットが暗号化されていない場合は、暗号化キーを指定して保管時の DB クラスターを暗号化します。

      DB スナップショットが暗号化されている場合は、暗号化キーを指定し、その指定された暗号化キーを使用して保管時の DB クラスターを暗号化します。DB スナップショットで使用される暗号化キー、または別のキーを指定できます。暗号化された DB スナップショットから 非暗号化の DB クラスターを作成することはできません。

    • [マイナーバージョン自動アップグレード]: この設定は Aurora MySQL DB クラスターに適用されません。

      Aurora MySQL のエンジンに関する更新の詳細については、「Amazon Aurora MySQL のデータベースエンジンの更新」を参照してください。

  4. [移行] を選択して、DB スナップショットを移行します。

  5. [インスタンス] を選択して、矢印アイコンを選択して DB クラスターの詳細を表示し、移行の進行状況をモニタリングします。詳細ページで、DB クラスターのプライマリインスタンスへの接続に使用されているクラスターエンドポイントがわかります。Aurora MySQL DB クラスターとの接続の詳細については、「Amazon Aurora DB クラスターへの接続」を参照してください。

restore-db-cluster-from-snapshot コマンドを次のパラメータで使用することで、RDS for MySQL DB インスタンスの DB スナップショットから Aurora DB クラスターを作成できます。

  • --db-cluster-identifier - 作成する DB クラスターの名前。

  • --engine aurora-mysql — MySQL 5.7 互換または 8.0 互換 DB クラスターの場合

  • --kms-key-id - DB スナップショットが暗号化されるかどうかに応じて、オプションで DB クラスターを暗号化するための AWS KMS key。

    • DB スナップショットが暗号化されていない場合は、暗号化キーを指定して保管時の DB クラスターを暗号化します。これを実行しない場合、DB クラスターは暗号化されません。

    • DB スナップショットが暗号化されている場合は、暗号化キーを指定し、その指定された暗号化キーを使用して保管時の DB クラスターを暗号化します。これを実行しない場合、保管時の DB クラスターは DB スナップショットの暗号化キーを使用して暗号化されます。

      注記

      暗号化された DB スナップショットから 非暗号化の DB クラスターを作成することはできません。

  • --snapshot-identifier – 移行する DB スナップショットの Amazon リソースネーム (ARN)。Amazon RDS ARN の詳細については、「Amazon Relational Database Service (Amazon RDS)」を参照してください。

RestoreDBClusterFromSnapshot コマンドを使用して DB スナップショットを移行すると、DB クラスターとプライマリインスタンスの両方がこのコマンドによって作成されます。

この例では、mydbcluster という名前の MySQL 5.7 互換 DB クラスターを ARN が mydbsnapshotARN に設定されている DB スナップショットから作成します。

Linux、macOS、Unix の場合:

aws rds restore-db-cluster-from-snapshot \ --db-cluster-identifier mydbcluster \ --snapshot-identifier mydbsnapshotARN \ --engine aurora-mysql

Windows の場合:

aws rds restore-db-cluster-from-snapshot ^ --db-cluster-identifier mydbcluster ^ --snapshot-identifier mydbsnapshotARN ^ --engine aurora-mysql

この例では、mydbcluster という名前の MySQL 5.7 互換 DB クラスターを ARN が mydbsnapshotARN に設定されている DB スナップショットから作成します。

Linux、macOS、Unix の場合:

aws rds restore-db-cluster-from-snapshot \ --db-cluster-identifier mydbcluster \ --snapshot-identifier mydbsnapshotARN \ --engine aurora-mysql

Windows の場合:

aws rds restore-db-cluster-from-snapshot ^ --db-cluster-identifier mydbcluster ^ --snapshot-identifier mydbsnapshotARN ^ --engine aurora-mysql