MySQL 互換データベースの AWS DMSのソースとしての使用 - AWS Database Migration Service

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

MySQL 互換データベースの AWS DMSのソースとしての使用

Database Migration Service を使用して、MySQL と互換性のある任意のデータベース (MySQL、MariaDB、または Amazon Aurora MySQL) からデータを移行できます。 AWS

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

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

以下のセクションでは、「セルフ管理」という用語は、オンプレミスまたは Amazon EC2 にインストールされているデータベースが対象です。「AWSが管理する」という用語は、Amazon RDS、Amazon Aurora、Amazon S3 のデータベースが対象です。

MySQL 互換データベースおよびの操作の詳細については AWS DMS、以下のセクションを参照してください。

AWS DMSを使用して MySQL から MySQL へ移行します。

MySQL 以外のデータベースエンジンから MySQL データベースに移行する異種移行では、ほとんどの場合、 AWS DMS 最適な移行ツールです。ただし、MySQL データベースから MySQL データベースに移行する同種移行の場合は、同種データ移行プロジェクトを使用することをお勧めします。同種データ移行では、ネイティブのデータベースツールを使用して、 AWS DMSと比較してデータ移行のパフォーマンスと精度が向上します。

MySQL 互換のデータベースをソースとして使用する AWS DMS

MySQL データベースをソースとして使用する前に AWS DMS、次の前提条件を満たしていることを確認してください。これらの前提条件は、自己管理型ソースと管理型ソースのどちらにも適用されます。 AWS

Replication Admin ロールを持つアカウントが必要です。 AWS DMS ロールには、次の権限が必要です。

  • [REPLICATION CLIENT] (レプリケーション クライアント) – この権限は、CDC タスクにのみ必要です。つまり、 full-load-only タスクにはこの権限は必要ありません。

  • [REPLICATION SLAVE] (レプリケーション スレーブ) – この権限は、CDC タスクにのみ必要です。つまり、 full-load-only タスクにはこの権限は必要ありません。

  • SUPER – この権限は、バージョン 5.6.6 より前の MySQL でのみ必要です。

AWS DMS ユーザーには、レプリケーションの対象となるソーステーブルに対する SELECT 権限も必要です。

自己管理型の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

CDC を使用するには、バイナリログを有効にしてください。バイナリロギングを有効にするには、MySQL の my.ini (Windows) または my.cnf (UNIX) ファイルで以下のパラメータを設定する必要があります。

パラメータ

server_id

このパラメータは、1 以上の値に設定します。

log-bin

パスをバイナリログファイル (log-bin=E:\MySql_Logs\BinLog) に設定します。ファイル拡張子を含めないでください。

binlog_format

このパラメータは ROW に設定します。binlog_formatSTATEMENT に設定されているときは場合によっては、ターゲットにデータレプリケーション時に矛盾が生じる可能性があるため、レプリケーション中にこの設定をお勧めします。データベースエンジンは、binlog_formatMIXED に設定されているとき、類似の矛盾したデータもターゲットに書き込みます。これはデータベースエンジンが自動的にSTATEMENTベースのログに切り替わり、ターゲットデータベースに一貫性のないデータが書き込まれることがあるためです。

expire_logs_days

このパラメータは、1 以上の値に設定します。ディスク容量の使いすぎを防ぐため、デフォルト値の 0 は使用しないことをお勧めします。

binlog_checksum

DMS バージョン 3.4.7 NONE 以前の場合は、このパラメータをに設定します。

binlog_row_image

このパラメータは FULL に設定します。

log_slave_updates

MySQL または MariaDB リードレプリカをソースとして使用している場合は、このパラメータを TRUE に設定します。

ソースで NDB (クラスター化) データベースエンジンを使用している場合、そのストレージエンジンを使用するテーブルで CDC を有効にするには以下のパラメータを設定する必要があります。これらの変更を MySQL の my.ini (Windows) または my.cnf (UNIX) ファイルに追加します。

パラメータ

ndb_log_bin

このパラメータは ON に設定します。この値により、クラスター化されたテーブルでの変更が確実にバイナリログに記録されます。

ndb_log_update_as_write

このパラメータは OFF に設定します。この値に設定すると、UPDATE ステートメントが INSERT ステートメントとしてバイナリログに書き込まれなくなります。

ndb_log_updated_only

このパラメータは OFF に設定します。この値に設定すると、バイナリログに変更された列だけでなく行全体が含められます。

AWSマネージド型の MySQL 互換データベースをソースとして使用する AWS DMS

AWS以下のマネージド MySQL 互換データベースをソースとして使用できます。 AWS DMS

  • MySQL Community Edition

  • MariaDB Community Edition

  • Amazon Aurora MySQL 互換エディション

AWSマネージド MySQL 互換データベースをのソースとして使用する場合は AWS DMS、CDC の以下の前提条件を満たしていることを確認してください。

  • RDS for MySQL と RDS for MariaDB のバイナリログを有効にするには、インスタンスレベルで自動バックアップを有効にします。Aurora MySQL クラスターのバイナリログを有効にするには、パラメータグループで変数 binlog_format を変更します。

    自動バックアップの設定の詳細については、Amazon RDS ユーザーガイドの「自動バックアップの使用」をご参照ください。

    Amazon RDS for MySQL データベースのバイナリログ設定の詳細については、Amazon RDS ユーザーガイドの「バイナリログ形式の設定」をご参照ください。

    Aurora MySQL クラスターのバイナリログ設定の詳細については、「Amazon Aurora MySQL クラスターのバイナリログを有効にする方法」をご参照ください。

  • CDC を使用する予定の場合は、バイナリログを有効にします。Amazon RDS for MySQL データベースのバイナリログの設定の詳細については、Amazon RDS ユーザーガイドの「バイナリログ形式の設定」をご参照ください。

  • バイナリログがで使用できることを確認してください。 AWS DMS AWS管理された MySQL 互換データベースはバイナリログをできるだけ早く消去するため、ログが使用可能な期間を長くする必要があります。たとえば、ログ保持を 24 時間に伸ばすには、次のコマンドを実行します。

    call mysql.rds_set_configuration('binlog retention hours', 24);
  • binlog_format パラメータを "ROW" に設定します。

    注記

    MySQL または MariaDB では、binlog_format は動的パラメータであるため、新しい値を有効にするために再起動する必要はありません。ただし、新しい値は新しいセッションにのみ適用されます。レプリケーションの目的で binlog_formatROW に切り替えても、値を変更する前にセッションが開始されていれば、データベースは引き続き MIXED 形式を使用して続くバイナリログを作成できます。これにより、 AWS DMS ソースデータベースのすべての変更を正しくキャプチャできなくなる可能性があります。MariaDB または MySQL データベースの binlog_format 設定を変更する場合は、必ずデータベースを再起動して既存のすべてのセッションを閉じるか、DML (データ操作言語) 操作を実行するアプリケーションを再起動します。binlog_formatROWパラメータをに変更した後でデータベースのすべてのセッションを強制的に再起動させると、それ以降のすべてのソースデータベースの変更が正しい形式で書き込まれるため、 AWS DMS それらの変更を正しくキャプチャできます。

  • binlog_row_image パラメータを "Full" に設定します。

  • DMS バージョン "NONE" 3.4.7 以前の場合は、binlog_checksumパラメータをに設定します。Amazon RDS MySQL でのパラメータの設定の詳細については、Amazon RDS ユーザーガイドの「自動バックアップの使用」をご参照ください。

  • Amazon RDS MySQL または Amazon RDS MariaDB リードレプリカをソースとして使用する場合は、リードレプリカでバックアップを有効にして、log_slave_updates パラメータが TRUE と設定されていることを確認します。

MySQL データベースをソースとして使用する場合の制限事項 AWS DMS

MySQL データベースをソースとして使用する場合は、次の点を考慮してください。

  • 変更データキャプチャ (CDC) は、Amazon RDS MySQL 5.5 以下ではサポートされていません。Amazon RDS for MySQL の場合、CDC を有効にするには、バージョン 5.6、5.7、または 8.0 を使用する必要があります。CDC は、セルフ管理 MySQL 5.5 ソースでサポートされています。

  • CDC の場合、列データ型を変更する CREATE TABLEADD COLUMNDROP COLUMNrenaming a column がサポートされています。ただし、DROP TABLERENAME TABLE、およびカラムのデフォルト値、カラムのNULL可能性、文字セットなどの他の属性に対する更新はサポートされていません。

  • ソース上のパーティションテーブルの場合、ターゲットテーブル準備モードを Drop tables on target に設定すると、MySQL AWS DMS ターゲットにパーティションのない単純なテーブルが作成されます。パーティション分割されたテーブルをターゲットのパーティション分割されたテーブルに移行するには、ターゲット MySQL データベースにパーティション分割されたテーブルを事前に作成します。

  • ALTER TABLE table_name ADD COLUMN column_name ステートメントを使用して、テーブルの先頭 (FIRST) または中間 (AFTER) に列を追加することはできません。列は常にテーブルの末尾に追加されます。

  • テーブル名に大文字と小文字が含まれていて、大文字と小文字が区別されるオペレーティングシステムにソースエンジンがホストされている場合、CDC はサポートされません。たとえば、Microsoft Windows や HFS+ を使用する OS X などです。

  • Aurora MySQL 互換エディションサーバーレス v1 は全ロードに使用できますが、CDC には使用できません。これは MySQL の前提条件を有効にできないためです。詳細については、「パラメータグループと Aurora サーバーレス v1」をご参照ください。

    Aurora MySQL 互換エディションサーバーレス v2 は CDC をサポートしています。

  • 列の AUTO_INCREMENT 属性は、ターゲットデータベース列に移行されません。

  • バイナリログが標準のブロックストレージに保存されている場合の変更のキャプチャはサポートされていません。たとえば、バイナリログが Amazon S3 に保存されていると、CDC は機能しません。

  • AWS DMS デフォルトで InnoDB ストレージエンジンを使用してターゲットテーブルを作成します。InnoDB 以外のストレージエンジンを使用する必要がある場合、テーブルを手動で作成し、何もしないモードを使用してそのテーブルに移行する必要があります。

  • DMS 移行タスクモードが [既存データを移行-全ロードのみ] AWS DMS になっていない限り、Aurora MySQL レプリカをソースとして使用することはできません。

  • 全ロード時に MySQL 互換ソースが停止している場合、 AWS DMS タスクはエラーで停止しません。タスクは正常に終了しますが、ターゲットとソースが同期しない可能性があります。この場合、タスクを再開するか、影響を受けたテーブルを再ロードしてください。

  • 列の値の一部で作成されたインデックスは移行されません。たとえば、インデックス CREATE INDEX first_ten_chars ON customer (name(10)) はターゲットに作成されません。

  • タスクが LOB を複製しないように設定されている場合もあります (タスク設定で SupportLobs「」が false になっているか、タスクコンソールで「LOB 列を含めない」が選択されている)。このような場合、は MEDIUMBLOB、LONGBLOB、MEDIUMTEXT、LONGTEXT AWS DMS の各列をターゲットに移行しません。

    BLOB、TINYBLOB、TEXT、および TINYTEXT 列は影響を受けず、ターゲットに移行されます。

  • 一時データテーブルまたはシステムでバージョン管理されたテーブルは、MariaDB ソースおよびターゲットデータベースではサポートされていません。

  • 2 つの Amazon RDS Aurora MySQL クラスター間で移行する場合、RDS Aurora MySQL ソース エンドポイントは、レプリカ インスタンスではなく読み取り/書き込みインスタンスである必要があります。

  • AWS DMS 現在、MariaDBのビュー移行はサポートされていません。

  • AWS DMS は MySQL のパーティションテーブルの DDL 変更をサポートしていません。CDC 中にパーティション DDL が変更されてもテーブルが中断されないようにするには、skipTableSuspensionForPartitionDdltrue に設定します。

  • AWS DMS バージョン 3.5.0 以降の XA トランザクションのみをサポートします。以前のバージョンは XA トランザクションをサポートしていません。 AWS DMS は MariaDB バージョン 10.6 の XA トランザクションをサポートしていません。詳細については、「XA トランザクションのサポート」を参照してください。

  • AWS DMS ソースデータに GTID が含まれていても、レプリケーションには GTID を使用しません。

  • AWS DMS バイナリログのトランザクション圧縮はサポートされていません。

  • AWS DMS InnoDB ストレージエンジンを使用する MySQL データベースの ON DELETE CASCADE イベントと ON UPDATE CASCADE イベントは伝播されません。このようなイベントについては、MySQL は子テーブルでのカスケード操作を反映する binlog イベントを生成しません。そのため、 AWS DMS 対応する変更を子テーブルに複製することはできません。詳細については、「インデックス、外部キー、カスケード更新、または削除が移行されない」を参照してください。

  • AWS DMS 計算列 (VIRTUALおよびGENERATED ALWAYS) への変更はキャプチャされません。この制限を回避するには、次の手順を実行します。

    • ターゲットデータベースにターゲットテーブルを事前に作成して、DO_NOTHINGまたは TRUNCATE_BEFORE_LOAD のフルロード設定の AWS DMS タスク設定を使用してタスクを作成する。

    • 計算列をタスクスコープから削除する変換ルールを追加する。変換ルールの詳細については、「 変換ルールおよび変換アクション」を参照。

XA トランザクションのサポート

Extended Architecture (XA) トランザクションは、複数のトランザクションリソースによる操作セットを単一の信頼性の高いグローバルトランザクションにグループ化するために使用できるトランザクションです。XA トランザクションは 2 フェーズコミットプロトコルを使用します。通常、XA トランザクションがオープンである間に変更をキャプチャすると、データが損失する可能性があります。データベースが XA トランザクションを使用していない場合は、IgnoreOpenXaTransactionsCheck のデフォルト値 TRUE を使用してこのアクセス権限と設定を無視できます。XA トランザクションのあるソースからレプリケーションを開始するには、次を実行します。

  • AWS DMS エンドポイントユーザーに以下の権限があることを確認してください。

    grant XA_RECOVER_ADMIN on *.* to 'userName'@'%';
  • エンドポイント設定 IgnoreOpenXaTransactionsCheckfalse に設定する。

注記

AWS DMS は MariaDB ソース DB バージョン 10.6 の XA トランザクションをサポートしていません。

MySQL をソースとして使用する場合のエンドポイント設定 AWS DMS

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

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

名前 説明
EventsPollInterval

データベースがアイドル状態のとき、バイナリログで新しい変更/イベントをチェックする頻度を指定します。

デフォルト値: 5

有効な値: 1~60

例: --my-sql-settings '{"EventsPollInterval": 5}'

この例では、5 AWS DMS 秒ごとにバイナリログの変更をチェックします。

ExecuteTimeout

AWS DMS バージョン 3.4.7 以降では、MySQL ソースエンドポイントのクライアントステートメントのタイムアウトを秒単位で設定します。

デフォルト値: 60

例: --my-sql-settings '{"ExecuteTimeout": 1500}'

ServerTimezone

ソース MySQL データベースのタイムゾーンを指定します。

例: --my-sql-settings '{"ServerTimezone": "US/Pacific"}'

AfterConnectScript

AWS DMS エンドポイントに接続した直後に実行するスクリプトを指定します。移行タスクは、SQL ステートメントが成功するか失敗するかにかかわらず、引き続き実行されます。

有効な値: セミコロンで区切られた 1 つ以上の有効な SQL ステートメント。

例: --my-sql-settings '{"AfterConnectScript": "ALTER SESSION SET CURRENT_SCHEMA=system"}'

CleanSrcMetadataOnMismatch

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

デフォルト値: false

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

skipTableSuspensionForPartitionDdl

AWS DMS は MySQL のパーティションテーブルの DDL 変更をサポートしていません。 AWS DMS バージョン 3.4.6 以降では、これを設定すると CDC 中のパーティション DDL true 変更によるテーブルの一時停止がスキップされます。 AWS DMS partitioned-table-related DDL を無視し、バイナリログの変更をさらに処理し続けます。

デフォルト値: false

例: --my-sql-settings '{"skipTableSuspensionForPartitionDdl": true}'

IgnoreOpenXaTransactionsCheck

AWS DMS バージョン 3.5.0 以降では、タスクが開始時に開いている XA トランザクションを無視するかどうかを指定します。ソースに XA トランザクションがある場合はこれを false に設定する。

デフォルト値: true

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

MySQL のソースデータ型

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

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。

AWS DMS データ型に関する追加情報については、を参照してくださいAWS Database Migration Service のデータ型

MySQL のデータ型

AWS DMS データタイプ

INT

INT4

BIGINT

INT8

MEDIUMINT

INT4

TINYINT

INT1

SMALLINT

INT2

UNSIGNED TINYINT

UINT1

UNSIGNED SMALLINT

UINT2

UNSIGNED MEDIUMINT

UINT4

UNSIGNED INT

UINT4

UNSIGNED BIGINT

UINT8

DECIMAL(10)

NUMERIC (10,0)

BINARY

BYTES(1)

BIT

BOOLEAN

BIT(64)

BYTES(8)

BLOB

BYTES(65535)

LONGBLOB

BLOB

MEDIUMBLOB

BLOB

TINYBLOB

BYTES(255)

DATE

DATE

DATETIME

DATETIME

括弧で囲まれた値が指定されていない DATETIME は、ミリ秒なしでレプリケートされる。括弧内の値が 1~5 (DATETIME(5) など) の DATETIME は、ミリ秒単位でレプリケートされる。

DATETIME 列をレプリケートしても、ターゲット上の時刻は変わらない。UTC には変換されない。

TIME

STRING

TIMESTAMP

DATETIME

TIMESTAMP 列をレプリケートすると、時間はターゲットで UTC に変換される。

YEAR

INT2

DOUBLE

REAL8

FLOAT

REAL(DOUBLE)

FLOAT 値が次の範囲にない場合は、変換を使用して FLOAT を STRING にマップする。変換の詳細については、「 変換ルールおよび変換アクション」をご参照ください。

サポートされる FLOAT の範囲は、-1.79E+308~-2.23E-308、0、2.23E-308~1.79E+308。

VARCHAR(45)

WSTRING (45)

VARCHAR(2000)

WSTRING (2000)

VARCHAR(4000)

WSTRING (4000)

VARBINARY (4000)

BYTES (4000)

VARBINARY (2000)

BYTES (2000)

CHAR

WSTRING

TEXT

WSTRING

LONGTEXT

NCLOB

MEDIUMTEXT

NCLOB

TINYTEXT

WSTRING(255)

GEOMETRY

BLOB

POINT

BLOB

LINESTRING

BLOB

POLYGON

BLOB

MULTIPOINT

BLOB

MULTILINESTRING

BLOB

MULTIPOLYGON

BLOB

GEOMETRYCOLLECTION

BLOB

ENUM

WSTRING ([length] (長さ))

ここで、[length] (長さ) は列挙型の最長値の長さです。

SET

WSTRING ([length] (長さ))

ここで、[length] (長さ) は、カンマを含む SET 内のすべての値の合計の長さです。

JSON

CLOB

注記

場合によっては、値が「ゼロ」(つまり、0000-00-00) の DATETIME データ型と TIMESTAMP データ型を指定できます。存在する場合は、レプリケーション タスクのターゲットデータベースが DATETIME データ型と TIMESTAMP データ型で「ゼロ」値に対応していることを確認してください。サポートされていない場合、これらの値はターゲットで NULL として記録されます。