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

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

AWS DMS を使用して、AWS DMS がサポートするソースデータエンジンのいずれかから、どの MySQL 互換データベースにもデータを移行できます。オンプレミス MySQL 互換データベースに移行する場合、AWS DMS では、ソースエンジンが AWS エコシステム内に存在することが必要です。エンジンは、Amazon RDS、Amazon Aurora、Amazon S3 などの Amazon マネージド型サービス上に存在できます。または、エンジンは Amazon EC2 の自己マネージド型データベース上に存在していてもかまいません。

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

AWS DMS は MySQL のバージョン 5.5、5.6、5.7、8.0 と Aurora MySQL をサポートしています。さらに、AWS DMS は MariaDB のバージョン 10.0.24 から 10.0.28、10.1、10.2、10.3 をサポートしています。

注記

ターゲットとしての MySQL 8.0 のサポートは、AWS DMS バージョン 3.3.1 以降で使用できます。

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

  • 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 によってデフォルトで InnoDB テーブルとして MySQL 互換のターゲットテーブルが作成されます。

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

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

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

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

  • 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 互換データベースで外部キーチェックを無効にするには、ターゲットエンドポイントの [Advanced] セクションで [Extra Connection Attributes] に次のコマンドを追加します。

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

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

MySQL データベースをターゲットとして使用する場合、AWS DMS では以下のものがサポートされません。

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

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

  • ソーステーブルの LOB 列のみが更新されると、AWS DMS は対応するターゲット列を更新しません。ターゲット LOB は、少なくとも他の 1 つの列が同じトランザクションで更新された場合にのみ更新されます。

  • 全ロードタスク時に MySQL 互換ターゲットにデータをロードすると、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.

AWS DMS のターゲットとして MySQL 互換データベースを使用する場合の追加の接続属性

追加の接続属性を使用して MySQL 互換ターゲットを設定できます。これらの設定は、ターゲットエンドポイントを作成するときに指定します。接続属性の設定が複数ある場合は、空白を追加せずにそれぞれをセミコロンで区切ります。

以下の表は、AWS DMS の MySQL 互換ターゲットを作成するときに使用できる、追加の構成設定を示しています。

名前 説明

targetDbType

ソーステーブルを移行するターゲット上の場所 (1 つのデータベースか複数のデータベースか) を指定します。

デフォルト値: MULTIPLE_DATABASES

有効な値: {SPECIFIC_DATABASE, MULTIPLE_DATABASES}

例: targetDbType=MULTIPLE_DATABASES

parallelLoadThreads

データを MySQL 互換ターゲットデータベースにロードする際のパフォーマンスが向上します。データを MySQL 互換ターゲットデータベースにロードする際に使用するスレッドの数を指定します。スレッドごとに別個の接続が必要になるため、スレッド数を大きく設定するとデータベースのパフォーマンスに悪影響を生じる場合があります。

デフォルト値: 1

有効な値: 1 ~ 5

例: parallelLoadThreads=1

initstmt=SET FOREIGN_KEY_CHECKS=0

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

initstmt=SET time_zone

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

デフォルト値: UTC

有効な値: 使用するタイムゾーンの 3 ~ 4 文字の省略形。有効な値は、ターゲット MySQL 互換データベースをホストしているオペレーティングシステムにおけるタイムゾーンの標準の省略形です。

例: initstmt=SET time_zone=UTC

afterConnectScript=SET character_set_connection='latin1'

MySQL 互換ターゲットが受け取ったステートメントを latin1 文字セット (データベースのデフォルトでコンパイルされる文字セット) に変換する必要があることを指定します。このパラメータでは通常、UTF8 クライアントからの変換時にパフォーマンスが向上します。

maxFileSize

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

デフォルト値: 32768 KB (32 MB)

有効な値: 1–1,048,576

例: maxFileSize=512

CleanSrcMetadataOnMismatch

不一致が発生すると、レプリケーションインスタンスのテーブルメタデータ情報をクリーンアップして再作成します。例: テーブルの ALTER DDL ステートメントを実行する場合、レプリケーションインスタンスにキャッシュされているテーブルに関する情報が変更される場合があります。Boolean.

デフォルト値: false

例: CleanSrcMetadataOnMismatch=false

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 (Scale)

スケールが 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 の場合、ucs2 が CHARACTER SET の LONGTEXT (LOB を完全にサポート) を使用します。

CLOB

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

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

長さが 0 の場合、LONGTEXT (LOB を完全にサポート) を使用します。