AWS DMSを使用してMySQL互換データベースからTiDB Cloudに移行する
PostgreSQL、Oracle、SQL Serverなどの異種データベースをTiDB Cloudに移行する場合は、AWS Database Migration Service(AWS DMS)の使用をお勧めします。
AWS DMSは、リレーショナルデータベース、データウェアハウス、NoSQLデータベース、その他のデータストアの移行を容易にするクラウドサービスです。AWS DMSを使用して、データをTiDB Cloudに移行できます。
このドキュメントでは、Amazon RDSを例として、AWS DMSを使用してTiDB Cloudにデータを移行する方法を示します。この手順は、セルフホスト型のMySQLデータベースまたはAmazon AuroraからTiDB Cloudへのデータ移行にも適用できます。
この例では、データソースはAmazon RDS、データ宛先はTiDB Cloud内のTiDB Cloud Dedicatedクラスタです。アップストリームデータベースとダウンストリームデータベースはどちらも同じリージョンにあります。
前提条件
移行を開始する前に、以下の内容を必ずお読みください。
- ソースデータベースが Amazon RDS または Amazon Auroraの場合、
binlog_formatパラメータをROWに設定する必要があります。データベースがデフォルトのパラメータ グループを使用する場合、binlog_formatパラメータはデフォルトでMIXEDとなり、変更できません。この場合、 新しいパラメータグループを作成する必要があります (例:newset。そのbinlog_formatをROWに設定します。次に、 デフォルトパラメータグループを変更するnewsetに変更します。パラメータ グループを変更するとデータベースが再起動されることに注意してください。 - ソース データベースが TiDB と互換性のある照合順序を使用していることを確認してください。TiDB の utf8mb4 文字セットのデフォルトの照合照合順序は
utf8mb4_binです。しかし、MySQL 8.0 では、デフォルトの照合照合順序はutf8mb4_0900_ai_ciです。アップストリームの MySQL がデフォルトの照合順序を使用している場合、TiDB はutf8mb4_0900_ai_ciと互換性がないため、AWS DMS は TiDB にターゲット テーブルを作成できず、データを移行できません。この問題を解決するには、移行前にソース データベースの照合順序utf8mb4_binに変更する必要があります。TiDB でサポートされている文字セットと照合順序の完全なリストについては、 文字セットと照合参照してください。 - TiDB には、デフォルトで
INFORMATION_SCHEMA、PERFORMANCE_SCHEMA、mysql、sys} 、およびtestシステム データベースが含まれています。AWS DMS 移行タスクを作成する際は、デフォルトの%を使用して移行オブジェクトを選択するのではなく、これらのシステム データベースを除外する必要があります。そうしないと、AWS DMS はこれらのシステム データベースをソース データベースからターゲット TiDB に移行しようとし、タスクが失敗します。この問題を回避するには、特定のデータベース名とテーブル名を入力することをお勧めします。 - AWS DMSのパブリックネットワークIPアドレスとプライベートネットワークIPアドレスを、ソースデータベースとターゲットデータベースの両方のIPアクセスリストに追加してください。そうしないと、状況によってはネットワーク接続が失敗する可能性があります。
- VPCピアリングまたはプライベートエンドポイント接続使用して、AWS DMS と TiDB クラスターを接続します。
- データ書き込みパフォーマンスを向上させるため、AWS DMSとTiDBクラスターには同じリージョンを使用することをお勧めします。
- AWS DMS
dms.t3.large(2 vCPU、8 GiBメモリ)以上のインスタンスクラスを使用することをお勧めします。インスタンスクラスが小さい場合、メモリ不足(OOM)エラーが発生する可能性があります。 - AWS DMS は、ターゲット データベースに
awsdms_controlデータベースを自動的に作成します。
制限
- AWS DMS は
DROP TABLEのレプリケーションをサポートしていません。 - AWS DMS は、テーブルやプライマリキーの作成など、基本的なスキーマ移行をサポートしています。ただし、AWS DMS はTiDB Cloudにセカンダリインデックス、外部キー、ユーザーアカウントを自動的に作成しません。必要に応じて、セカンダリインデックスを持つテーブルを含め、これらのオブジェクトを TiDB に手動で作成する必要があります。詳細については、 AWS Database Migration Service の移行計画参照してください。
ステップ1. AWS DMSレプリケーションインスタンスを作成する
AWS DMS コンソールのレプリケーションインスタンスページに移動し、対応するリージョンに切り替えます。 AWS DMS にはTiDB Cloudと同じリージョンを使用することをお勧めします。このドキュメントでは、アップストリームおよびダウンストリームのデータベースと DMS インスタンスはすべてus-west-2リージョンにあります。
「レプリケーションインスタンスの作成」をクリックします。
インスタンス名、ARN、および説明を入力してください。
インスタンス構成を入力してください。
- インスタンスクラス:適切なインスタンスクラスを選択してください。パフォーマンスを向上させるには、
dms.t3.largeまたはそれより高いインスタンスクラスを使用することをお勧めします。 - エンジンバージョン:デフォルト設定を使用します。
- マルチAZ :ビジネスニーズに応じて、シングルAZまたはマルチAZを選択してください。
- インスタンスクラス:適切なインスタンスクラスを選択してください。パフォーマンスを向上させるには、
storageは「割り当て済みstorage(GiB)」フィールドで設定します。デフォルト設定を使用してください。
接続性とセキュリティを設定します。
- ネットワークタイプ - 新規: IPv4を選択してください。
- IPv4 用仮想プライベートクラウド (VPC) :必要な VPC を選択してください。ネットワーク構成を簡素化するため、アップストリームデータベースと同じ VPC を使用することをお勧めします。
- レプリケーションサブネットグループ:レプリケーションインスタンスに使用するサブネットグループを選択してください。
- 一般公開:デフォルト設定を使用します。
必要に応じて、詳細設定、メンテナンス、およびタグを設定します。 「レプリケーションインスタンスの作成」をクリックして、インスタンスの作成を完了します。
ステップ2. ソースデータベースエンドポイントを作成する
AWS DMSコンソールで、先ほど作成したレプリケーションインスタンスをクリックします。次のスクリーンショットに示すように、パブリックネットワークIPアドレスとプライベートネットワークIPアドレスをコピーします。
Amazon RDS のセキュリティグループルールを設定します。この例では、AWS DMS インスタンスのパブリック IP アドレスとプライベート IP アドレスをセキュリティグループに追加します。
ソースデータベースのエンドポイントを作成するには、 「エンドポイントの作成」をクリックします。
この例では、 「RDS DBインスタンスの選択」をクリックし、ソースとなるRDSインスタンスを選択します。ソースデータベースがセルフホスト型のMySQLの場合は、この手順をスキップして、次の手順で情報を入力できます。
以下の情報を設定してください。
- エンドポイント識別子:後続のタスク構成で識別しやすくするために、ソースエンドポイントにラベルを作成します。
- 記述的な Amazon リソース名 (ARN) - オプション: デフォルトの DMS ARN に分かりやすい名前を作成します。
- ソースエンジン: MySQLを選択してください。
- エンドポイントデータベースへのアクセス:アクセス情報を手動で提供するを選択します。
- サーバー名:データプロバイダーのデータサーバー名を入力してください。データベースコンソールからコピーできます。アップストリームがAmazon RDSまたはAmazon Auroraの場合は、名前が自動的に入力されます。ドメイン名のないセルフホスト型MySQLの場合は、IPアドレスを入力してください。
- ソースデータベースのポート番号、ユーザー名、パスワードを入力してください。
- セキュリティソケットレイヤー(SSL)モード:必要に応じてSSLモードを有効にできます。
エンドポイント設定、 KMSキー、タグにはデフォルト値を使用してください。エンドポイント接続のテスト(オプション)セクションでは、ネットワーク構成を簡素化するために、ソースデータベースと同じVPCを選択することをお勧めします。対応するレプリケーションインスタンスを選択し、 「テストの実行」をクリックします。ステータスが「成功」である必要があります。
「エンドポイントの作成」をクリックします。
ステップ3. ターゲットデータベースエンドポイントを作成する
AWS DMSコンソールで、先ほど作成したレプリケーションインスタンスをクリックします。次のスクリーンショットに示すように、パブリックネットワークIPアドレスとプライベートネットワークIPアドレスをコピーします。
TiDB Cloudコンソールで、私のTiDBページに移動し、対象のリソース名をクリックしてから、右上隅の[接続]をクリックすると、 TiDB Cloudデータベースの接続情報が表示されます。
ダイアログの「ステップ 1: トラフィック フィルタの作成」で、 「編集」をクリックし、AWS DMS コンソールからコピーしたパブリック IP アドレスとプライベート IP アドレスを入力して、 「フィルタの更新」をクリックします。AWS DMS レプリケーション インスタンスのパブリック IP アドレスとプライベート IP アドレスを TiDB クラスタのトラフィック フィルタに同時に追加することをお勧めします。そうしないと、状況によっては AWS DMS が TiDB クラスタに接続できない場合があります。
CA証明書をダウンロードするには、[CA証明書のダウンロード]をクリックします。ダイアログの[ステップ3:SQLクライアントで接続する]で、接続文字列内の
-u、-h、および-P情報を後で使用するためにメモしておきます。ダイアログの「VPCピアリング」タブをクリックし、 「ステップ1:VPCの設定」の下にある「追加」をクリックして、TiDBクラスターとAWS DMSのVPCピアリング接続を作成します。
対応する情報を設定します。 VPCピアリング接続を設定する参照してください。
TiDBクラスタのターゲットエンドポイントを設定します。
- エンドポイントタイプ:ターゲットエンドポイントを選択してください。
- エンドポイント識別子:エンドポイントの名前を入力してください。
- 記述的な Amazon リソース名 (ARN) - オプション: デフォルトの DMS ARN に分かりやすい名前を作成します。
- 対象エンジン: MySQLを選択してください。
AWS DMSコンソールで、 [エンドポイントの作成]をクリックしてターゲットデータベースエンドポイントを作成し、次の情報を設定します。
- サーバー名: 記録した
-h情報である TiDB クラスターのホスト名を入力してください。 - ポート:記録した
-P情報と同じTiDBクラスタのポート番号を入力してください。TiDBクラスタのデフォルトポートは4000です。 - ユーザー名: TiDB クラスターのユーザー名を入力してください。これは、記録した
-u情報です。 - パスワード:TiDBクラスタのパスワードを入力してください。
- セキュリティソケットレイヤー(SSL)モード: Verify-caを選択します。
- 「新しいCA証明書を追加」をクリックして、前の手順でTiDB CloudコンソールからダウンロードしたCAファイルをインポートします。
- サーバー名: 記録した
CAファイルをインポートします。
エンドポイント設定、 KMSキー、タグにはデフォルト値を使用します。エンドポイント接続のテスト(オプション)セクションで、ソースデータベースと同じVPCを選択します。対応するレプリケーションインスタンスを選択し、 「テストの実行」をクリックします。ステータスが「成功」である必要があります。
「エンドポイントの作成」をクリックします。
ステップ4. データベース移行タスクを作成する
AWS DMS コンソールで、 データ移行タスクページに移動します。お住まいの地域に切り替えてください。次に、ウィンドウの右上隅にある「タスクの作成」をクリックします。
以下の情報を設定してください。
- タスク識別子:タスクの名前を入力してください。覚えやすい名前を使用することをお勧めします。
- 記述的な Amazon リソース名 (ARN) - オプション: デフォルトの DMS ARN に分かりやすい名前を作成します。
- レプリケーションインスタンス:先ほど作成したAWS DMSインスタンスを選択します。
- ソースデータベースエンドポイント:先ほど作成したソースデータベースエンドポイントを選択してください。
- ターゲットデータベースエンドポイント:先ほど作成したターゲットデータベースエンドポイントを選択してください。
- 移行タイプ:必要に応じて移行タイプを選択してください。この例では、 「既存データの移行と進行中の変更の複製」を選択します。
以下の情報を設定してください。
- 編集モード:ウィザードを選択してください。
- ソーストランザクションのカスタムCDC停止モード:デフォルト設定を使用します。
- 対象テーブルの準備モード:必要に応じて「何もしない」またはその他のオプションを選択してください。この例では、 「何もしない」を選択します。
- フルロード完了後にタスクを停止する:デフォルト設定を使用する。
- LOB列をレプリケーションに含める:限定LOBモードを選択します。
- LOBの最大サイズ(KB) :デフォルト値の32を使用します。
- 検証機能を有効にする:必要に応じて選択してください。
- タスクログ:今後のトラブルシューティングのために、 CloudWatchログを有効にするオプションを選択してください。関連する設定については、デフォルト設定を使用してください。
テーブルマッピングのセクションで、移行するデータベースを指定します。
スキーマ名は、Amazon RDS インスタンス内のデータベース名です。ソース名のデフォルト値は「%」で、これは Amazon RDS 内のすべてのデータベースが TiDB に移行されることを意味します。これにより、Amazon RDS 内の
mysqlやsysなどのシステム データベースが TiDB クラスターに移行され、タスクが失敗します。そのため、特定のデータベース名を入力するか、すべてのシステム データベースを除外することをお勧めします。たとえば、次のスクリーンショットの設定に従って、franktestという名前のデータベースと、そのデータベース内のすべてのテーブルのみが移行されます。右下隅の「タスクの作成」をクリックしてください。
データ移行タスクページに戻ります。お住まいの地域に切り替えてください。タスクのステータスと進捗状況を確認できます。
移行中に問題や障害が発生した場合は、 CloudWatchのログ情報を確認して問題のトラブルシューティングを行ってください。
関連項目
AWS DMS をTiDB Cloudに接続する方法の詳細については、 AWS DMSをTiDB Cloudに接続するを参照してください。
Aurora MySQL や Amazon Relational Database Service (RDS) などの MySQL 互換データベースからTiDB Cloudに移行する場合は、 TiDB Cloudでのデータ移行を使用することをお勧めします。
AWS DMS を使用して Amazon RDS for Oracle からTiDB Cloudに移行する場合は、 AWS DMSを使用してAmazon RDS for OracleからTiDB Cloudに移行するを参照してください。
















