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 専用クラスターです。アップストリーム データベースとダウンストリーム データベースは両方とも同じリージョンにあります。
前提条件
移行を開始する前に、次の内容を必ず読んでください。
- ソースデータベースが 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 アクセスリストに追加します。そうしないと、一部のシナリオでネットワーク接続が失敗する可能性があります。
- 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
。
ステップ 1. AWS DMS レプリケーションインスタンスを作成する
AWS DMS コンソールのレプリケーションインスタンスページに移動し、対応するリージョンに切り替えます。 AWS DMS にはTiDB Cloudと同じリージョンを使用することをお勧めします。このドキュメントでは、アップストリームおよびダウンストリームのデータベースと DMS インスタンスはすべてus-west-2リージョンにあります。
[レプリケーション インスタンスの作成]をクリックします。
インスタンス名、ARN、説明を入力します。
インスタンス構成を入力します。
- インスタンス クラス: 適切なインスタンス クラスを選択します。パフォーマンスを向上させるには、
dms.t3.large
つ以上のインスタンス クラスを使用することをお勧めします。 - エンジンのバージョン: デフォルトの構成を使用します。
- マルチ AZ : ビジネス ニーズに基づいてシングル AZまたはマルチ AZを選択します。
- インスタンス クラス: 適切なインスタンス クラスを選択します。パフォーマンスを向上させるには、
[割り当てられたstorage(GiB)]フィールドでstorageを構成します。デフォルトの構成を使用します。
接続とセキュリティを構成します。
- ネットワーク タイプ - 新規: 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 アドレスを入力できます。
- ソース データベースの [**ポート] 、 [ユーザー名**] 、および[パスワード]を入力します。
- セキュリティ Socket Layer (SSL) モード: 必要に応じて SSL モードを有効にできます。
エンドポイント設定、 KMS キー、タグにはデフォルト値を使用します。 [エンドポイント接続のテスト (オプション)]セクションでは、ネットワーク構成を簡素化するために、ソース データベースと同じ VPC を選択することをお勧めします。対応するレプリケーション インスタンスを選択し、 [テストの実行]をクリックします。ステータスは成功である必要があります。
「エンドポイントの作成」をクリックします。
ステップ 3. ターゲット データベース エンドポイントを作成する
AWS DMS コンソールで、作成したばかりのレプリケーション インスタンスをクリックします。次のスクリーンショットに示すように、パブリック ネットワーク IP アドレスとプライベート ネットワーク IP アドレスをコピーします。
TiDB Cloudコンソールで、 クラスターページに移動し、ターゲット クラスターの名前をクリックし、右上隅にある[接続]をクリックして、 TiDB Cloudデータベース接続情報を取得します。
[ステップ 1: ダイアログのトラフィック フィルターを作成する]で、 [編集]をクリックし、AWS DMS コンソールからコピーしたパブリック ネットワークおよびプライベート ネットワークの IP アドレスを入力し、 [フィルターの更新]をクリックします。 AWS DMS レプリケーション インスタンスのパブリック IP アドレスとプライベート IP アドレスを同時に TiDB クラスター トラフィック フィルターに追加することをお勧めします。そうしないと、一部のシナリオでは AWS DMS が TiDB クラスターに接続できない可能性があります。
[TiDB クラスター CA のダウンロード]をクリックして CA 証明書をダウンロードします。ダイアログの「ステップ 3: SQL クライアントに接続する」で、後で使用できるように接続文字列の
-u
、-h
、および-P
の情報をメモします。ダイアログの[VPC ピアリング]タブをクリックし、 [ステップ 1: VPC をセットアップする]で[追加] をクリックして、TiDB クラスターと AWS DMS の VPC ピアリング接続を作成します。
対応する情報を設定します。 VPC ピア接続のセットアップを参照してください。
TiDB クラスターのターゲット エンドポイントを構成します。
- エンドポイント タイプ: [ターゲット エンドポイント]を選択します。
- エンドポイント識別子: エンドポイントの名前を入力します。
- 説明的な Amazon リソースネーム (ARN) - オプション: デフォルトの DMS ARN のフレンドリ名を作成します。
- ターゲット エンジン: MySQLを選択します。
AWS DMS コンソールで、 [エンドポイントの作成]をクリックしてターゲット データベース エンドポイントを作成し、次の情報を構成します。
- サーバー名: TiDB クラスターのホスト名を入力します。これは、記録した
-h
情報です。 - Port : TiDB クラスターのポートを入力します。これは、記録した
-P
の情報です。 TiDB クラスターのデフォルトのポートは 4000 です。 - ユーザー名: TiDB クラスターのユーザー名を入力します。これは、記録した
-u
情報です。 - パスワード: TiDB クラスターのパスワードを入力します。
- セキュリティ Socket Layer (SSL) モード: Verify-caを選択します。
- [新しい CA 証明書の追加]をクリックして、前の手順でTiDB Cloudコンソールからダウンロードした CA ファイルをインポートします。
- サーバー名: TiDB クラスターのホスト名を入力します。これは、記録した
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
という名前のデータベースとそのデータベース内のすべてのテーブルのみが移行されます。右下隅にある「タスクの作成」をクリックします。
データ移行タスクページに戻ります。お住まいの地域に切り替えてください。タスクのステータスと進捗状況を確認できます。
移行中に問題や障害が発生した場合は、 クラウドウォッチのログ情報を確認して問題のトラブルシューティングを行うことができます。
こちらも参照
Aurora MySQL や Amazon Relational Database Service (RDS) などの MySQL 互換データベースからTiDB Cloudに移行する場合は、 TiDB Cloudでのデータ移行を使用することをお勧めします。
AWS DMS を使用して Amazon RDS for Oracle から TiDB サーバーレスに移行する場合は、 AWS DMS を使用して Amazon RDS for Oracle から TiDB サーバーレスに移行するを参照してください。