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 などの AWS 管理型サービス上に存在できます。または、エンジンは Amazon EC2 の自己管理型データベース上に存在していてもかまいません。

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

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

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

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

  • MySQL 固有の移行前評価を使用する場合、次の権限を付与します。

    grant select on mysql.user to <dms_user>; grant select on mysql.db to <dms_user>; grant select on mysql.tables_priv to <dms_user>; grant select on mysql.role_edges to <dms_user> #only for MySQL version 8.0.11 and higher

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

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.
  • MySQL バージョン 5.7 と互換性がある Amazon Aurora バージョン 2 のターゲットとして Aurora Serverless が利用可能です。(MySQL 5.7 と互換性がある Aurora Serverless を使用できるようにするには、Aurora MySQL バージョン 2.07.1 を選択します。) Aurora Serverless の詳細については、「Amazon Aurora ユーザーガイド」の「Aurora Serverless v2 を使用する」を参照してください。

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

  • TIME のデータ型をレプリケートする場合、時間値の小数部分はレプリケートされません。

  • 追加接続属性 loadUsingCSV=false を使用して TIME のデータ型をレプリケートする場合、時間値は [00:00:00, 23:59:59] の範囲に制限されます。

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

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

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

名前 説明

ConnectionTimeout

この追加の接続属性 (ECA) を使用して、MySQL インスタンスのエンドポイント接続のタイムアウトを秒単位で設定する。デフォルト値は 10 秒です。ECA の例: ConnectionTimeout=30

TargetDbType

ソーステーブルを移行するターゲット上の場所 (1 つのデータベースか複数のデータベースか) を指定します。AWS CLI または AWS マネジメントコンソール を指定した場合に、SPECIFIC_DATABASE を使用する場合は、データベース名を指定する必要があります。

デフォルト値: 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 単位) を指定します。

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

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

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

追加の接続属性を使用して、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

タイムスタンプ

"スケールが 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 を完全にサポート) を使用します。