AWS Database Migration Service のターゲットとしての MySQL 互換データベースの使用 - AWS Database Migration Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Database Migration Service のターゲットとしての MySQL 互換データベースの使用

AWS DMS を使用して、AWS DMS がサポートするソースデータエンジンのいずれかから、任意の MySQL 互換データベースにデータを移行できます。オンプレミスの MySQL 互換データベースに移行する場合、AWS DMS では、ソースエンジンが AWS エコシステム内に配置されている必要があります。データベースエンジンは、Amazon RDS、Amazon Aurora、Amazon S3 などの AWS が管理するサービス上に配置できます。データベースエンジンは、Amazon EC2 のセルフマネージド型データベースに配置することもできます。

MySQL 互換エンドポイントとレプリケーションインスタンス間の接続を SSL を使用して暗号化できます。MySQL 互換エンドポイントで SSL を使用する方法の詳細については、「AWS Database Migration Service での SSL の使用」を参照してください。

AWS DMS がターゲットとしてサポートする MySQL のバージョンについては、「のターゲット AWS DMS」を参照してください。

次の MySQL 互換データベースを AWS DMS のターゲットとして使用できます。

  • MySQL Community Edition

  • MySQL Standard Edition

  • MySQL Enterprise Edition

  • MySQL Cluster Carrier Grade Edition

  • MariaDB Community Edition

  • MariaDB Enterprise Edition

  • MariaDB Column Store

  • Amazon Aurora MySQL

注記

ソースのストレージエンジン (MyISAM、MEMORY など) を問わず、AWS DMS はデフォルトで MySQL 互換のターゲットテーブルを InnoDB テーブルとして作成します。

InnoDB 以外のストレージエンジンでテーブルが必要な場合は、MySQL 互換ターゲット上にテーブルを手動で作成し、[何もしない] オプションを使用してテーブルを移行できます。詳細については、「全ロードタスク設定」を参照してください。

AWS DMS のターゲットとしての MySQL 互換データベースの使用の詳細については、以降のセクションを参照してください。

AWS Database Migration Service のターゲットとしての MySQL 互換データベースの使用

AWS DMS のターゲットとして MySQL 互換データベースの使用を開始する前に、次の前提条件を満たしていることを確認します。

  • MySQL 互換データベースに対して読み取り/書き込み権限を持つユーザーアカウントを AWS DMS に提供します。必要なアクセス権限を作成するには、次のコマンドを実行します。

    CREATE USER '<user acct>'@'%' IDENTIFIED BY '<user password>'; GRANT ALTER, CREATE, DROP, INDEX, INSERT, UPDATE, DELETE, SELECT ON <schema>.* TO '<user acct>'@'%'; GRANT ALL PRIVILEGES ON awsdms_control.* TO '<user acct>'@'%';
  • フルロード移行フェーズ中、ターゲットテーブルの外部キーは無効にする必要があります。フルロード中に MySQL 互換データベースでの外部キーチェックを無効にするには、ターゲットエンドポイントの AWS DMS コンソールの [追加の接続属性] セクションに次のコマンドを追加します。

    Initstmt=SET FOREIGN_KEY_CHECKS=0;
  • AWS DMS がターゲットデータベースにデータをロードできるように、データベースパラメータ local_infile = 1 を設定します。

MySQL 互換性データベースを AWS Database Migration Service のターゲットとして使用する場合の制限

MySQL データベースをターゲットとして使用する場合、AWS DMS は次をサポートしません。

  • データ定義言語 (DDL) ステートメントの TRUNCATE PARTITION、DROP TABLE、RENAME TABLE

  • ALTER TABLE table_name ADD COLUMN column_name ステートメントを使用したテーブルの先頭または中間への列の追加

  • フルロードタスクで MySQL 互換ターゲットにデータをロードする場合、AWS DMS はタスクログの制約を原因とするエラーは報告しません。これにより、重複キーエラーやレコード数の不一致が発生する可能性があります。これは、MySQL LOAD DATA によるコマンドでのローカルデータの処理方法によるものです。フルロードフェーズ時は、必ず次を実行します。

    • Constraint を無効にする

    • データの整合性確保には AWS DMS の検証を使用する

  • 列の値を既存の値に更新すると、MySQL 互換データベースは 0 rows affected 警告を返します。この動作は技術的にはエラーではないとはいえ、その他のデータベースエンジンによる対処方法とは異なります。例えば、Oracle の場合は 1 行の更新を実行します。MySQL 互換データベースの場合、AWS DMS は awsdms_apply_exceptions コントロールテーブルにエントリを生成して、次の警告をログに記録します。

    Some changes from the source database had no impact when applied to the target database. See awsdms_apply_exceptions table for details.
  • Aurora Serverless は、MySQL バージョン 5.6 と互換性のある Amazon Aurora バージョン 1 のターゲットとして利用できます。Aurora Serverless は、MySQL バージョン 5.7 と互換性のある Amazon Aurora バージョン 2 のターゲットとして利用できます。(MySQL 5.7 と互換性がある Aurora Serverless を使用するには、Aurora MySQL バージョン 2.07.1 を選択します)。Aurora Serverless の詳細については、「Amazon Aurora Serverless ユーザーガイド」の「Amazon Aurora Serverless の使用」を参照してください。

  • AWS DMSは、インスタンスが書き込み可能モードでない限り、つまり read_only パラメータと innodb_read_only パラメータが 0 または OFF に設定されている場合を除き、Aurora または Amazon RDS のリーダーエンドポイントの使用をサポートしていません。Amazon RDS と Aurora をターゲットとして使用する方法の詳細については、次を参照してください。

MySQL 互換データベースを AWS DMS のターゲットとして使用する場合のエンドポイントの設定

エンドポイントの設定を使用して、追加の接続属性の使用する場合と同様に、ターゲットの MySQL 互換データベースを設定できます。ターゲットエンドポイントを作成する際に、AWS DMS コンソールを使用するか、AWS CLI--my-sql-settings '{"EndpointSetting": "value", ...}' の JSON 構文を指定して create-endpoint コマンドを使用して設定を指定します。

次の表は、MySQL をターゲットとして使用できるエンドポイント設定を説明しています。

名前 説明

TargetDbType

ターゲットのソーステーブルの移行先、単一のデータベースか複数のデータベースかを指定する。SPECIFIC_DATABASE を指定した場合は、AWS CLI または AWS Management Console を使用してデータベース名を指定する必要がある。

デフォルト値: MULTIPLE_DATABASES

有効値: {SPECIFIC_DATABASE, MULTIPLE_DATABASES}

例: --my-sql-settings '{"TargetDbType": "MULTIPLE_DATABASES"}'

ParallelLoadThreads

MySQL 互換のターゲットデータベースにデータをロードする際のパフォーマンスを向上させる。MySQL 互換のターゲットデータベースにデータをロードするために使用するスレッドの数を指定する。スレッドごとに別個の接続が必要になるため、スレッド数を大きく設定するとデータベースのパフォーマンスに悪影響を及ぼす可能性がある。

デフォルト値: 1

有効値: 1~5

例: --my-sql-settings '{"ParallelLoadThreads": 1}'

AfterConnectScript

AWS DMS がエンドポイントに接続した直後に実行するスクリプトを指定する。

例えば、MySQL 互換のターゲットが受信するステートメントをデータベースのデフォルトのコンパイル済み文字セットである latin1 文字セットに変換するように指定できる。通常、このパラメータを使用すると UTF8 クライアントからの変換時のパフォーマンスが向上する。

例: --my-sql-settings '{"AfterConnectScript": "SET character_set_connection='latin1'"}'

MaxFileSize

MySQL 互換データベースへのデータ転送に使用される .csv ファイルの最大サイズ (KB 単位) を指定する。

デフォルト値: 32,768 KB (32 メガバイト)

有効値: 1~1,048,576

--my-sql-settings '{"MaxFileSize": 512}'

CleanSrcMetadataOnMismatch

不一致が発生した場合、レプリケーションインスタンス上のテーブルメタデータ情報を消去して再作成する。例えば、テーブルに対して変更 DDL ステートメントを実行すると、レプリケーションインスタンスにキャッシュされたテーブルの情報とは異なる情報が生成される可能性がある。ブール型。

デフォルト値: false

例: --my-sql-settings '{"CleanSrcMetadataOnMismatch": false}'

追加の接続属性を使用して、MySQL 互換のターゲットデータベースを設定することもできます。

次の表は、MySQL をターゲットとして使用できる追加の接続属性を説明しています。

名前 説明

Initstmt=SET FOREIGN_KEY_CHECKS=0;

外部キーチェックを無効にする。

例: --extra-connection-attributes "Initstmt=SET FOREIGN_KEY_CHECKS=0;"

Initstmt=SET time_zone

ターゲットの MySQL 互換データベースのタイムゾーンを指定する。

デフォルト値: UTC

有効値:ターゲットの MySQL データベースで使用可能なタイムゾーン名。

例: --extra-connection-attributes "Initstmt=SET time_zone=US/Pacific;"

別の方法として、--my-sql-settings コマンドの AfterConnectScript パラメータを使用して外部キーチェックを無効にし、データベースのタイムゾーンを指定することもできる。

MySQL のターゲットデータ型

次の表は、AWS DMS の使用時にサポートされるターゲットの MySQL データベースのデータ型と、AWS DMS データ型からのデフォルトのマッピングを説明しています。

AWS DMS のデータ型の詳細については、「AWS Database Migration Service のデータ型」を参照してください。

AWS DMS のデータ型

MySQL のデータ型

BOOLEAN

BOOLEAN

BYTES

長さが 1~65,535 の場合、VARBINARY (長さ) を使用する。

長さが 65,536~2,147,483,647 の場合、LONGLOB を使用する。

DATE

DATE

TIME

TIME

TIMESTAMP

位取り => 0 かつ =< 6 の場合: DATETIME (位取り)

位取り => 7 かつ =< 9 の場合: VARCHAR (37)

INT1

TINYINT

INT2

SMALLINT

INT4

INTEGER

INT8

BIGINT

NUMERIC

DECIMAL (p,s)

REAL4

FLOAT

REAL8

DOUBLE PRECISION

STRING

長さが 1~21,845 の場合、VARCHAR (長さ) を使用する。

長さが 21,846~2,147,483,647 の場合、LONGTEXT を使用する。

UINT1

UNSIGNED TINYINT

UINT2

UNSIGNED SMALLINT

UINT4

UNSIGNED INTEGER

UINT8

UNSIGNED BIGINT

WSTRING

長さが 1~32,767 の場合、VARCHAR (長さ) を使用する。

長さが 32,768~2,147,483,647 の場合、LONGTEXT を使用する。

BLOB

長さが 1~65,535 の場合、BLOB を使用する。

長さが 65,536~2,147,483,647 の場合、LONGBLOB を使用する。

長さが 0 の場合、LONGBLOB (完全 LOB 対応) を使用する。

NCLOB

長さが 1~65,535 の場合、TEXT を使用する。

長さが 65,536~2,147,483,647 の場合、CHARACTER SET が ucs2 の LONGTEXT を使用する。

長さが 0 の場合、CHARACTER SET が ucs2 の LONGTEXT (完全 LOB 対応) を使用する。

CLOB

長さが 1~65,535 の場合、TEXT を使用する。

長さが 65,536~2147483647 の場合、LONGTEXT を使用する。

長さが 0 の場合、LONGTEXT (完全 LOB 対応) を使用する。