データ伝送サービス (DTS) を Kafka クラスター、および TiDB の Pump と Drainer コンポーネントと組み合わせて使用し、自己管理 TiDB データベースから AnalyticDB for MySQL にデータを同期します。
前提条件
-
AnalyticDB for MySQL クラスターが作成されていること。 詳細については、「AnalyticDB for MySQL 3.0 クラスターの作成」をご参照ください。
-
宛先の AnalyticDB for MySQL クラスターに十分なストレージ容量があること。
仕組み

TiDB は MySQL とは異なる binlog 形式とメカニズムを使用します。 ソースデータベースへの変更を最小限に抑えながら増分データを同期するには、TiDB の Pump および Drainer コンポーネントとともに Kafka クラスターをデプロイします。
Pump は TiDB の binlog をリアルタイムでキャプチャして Drainer に転送し、Drainer はそれをダウンストリームの Kafka クラスターに書き込みます。 その後、DTS は Kafka からデータを取得し、AnalyticDB for MySQL などのターゲットデータベースにリアルタイムで同期します。
制限事項
-
初期完全データ同期中、DTS はソースデータベースとターゲットデータベースの読み取りおよび書き込みリソースを消費するため、データベースの負荷が増加します。 データベースパフォーマンスが低い、インスタンスの仕様が低い、またはビジネストラフィックが多い (たとえば、ソースデータベースに低速 SQL クエリやプライマリキーのないテーブルが多い、またはターゲットデータベースでデッドロックが発生する) 場合、データベースの負荷が増加し、サービスが利用できなくなる可能性さえあります。 データを同期する前に、ソースインスタンスと宛先インスタンスのパフォーマンスを評価してください。 両方のインスタンスの CPU 使用率が 30% 未満であるなど、オフピーク時にデータ同期を実行することを推奨します。
-
同期中にソースオブジェクトに対して gh-ost または pt-online-schema-change を使用して DDL 操作を実行しないでください。 実行した場合、タスクは失敗します。
-
AnalyticDB for MySQL では、いずれかのノードのディスク使用率が 80% を超えるとクラスターがロックされます。 開始する前に、宛先クラスターに十分な容量があることを確認してください。
-
プレフィックスインデックスを持つテーブルは同期できず、タスクの失敗を引き起こす可能性があります。
-
DTS タスクの実行中に宛先の AnalyticDB for MySQL 3.0 クラスターがバックアップ中の場合、タスクは失敗します。
課金
同期タイプ | 料金 |
スキーマ同期および完全データ同期 | 無料です。 |
増分データ同期 | 有料です。 詳細については、「課金概要」をご参照ください。 |
サポートされる SQL 操作
-
DDL 操作: CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE、ADD COLUMN、DROP COLUMN
-
DML 操作: INSERT、UPDATE、DELETE
同期中にソーステーブルのフィールドのデータ型が変更されると、タスクはエラーを報告して停止します。 詳細については、「フィールドタイプの変更によって発生した同期の失敗を修正する」をご参照ください。
事前準備
Pump、Drainer、および Kafka クラスターサーバーは、ソースデータベースサーバーと同じ内部ネットワーク上にある必要があります。
-
Pump および Drainer コンポーネントをデプロイします。 詳細については、「TiDB Binlog クラスターのデプロイ」をご参照ください。
-
Drainer コンポーネントの設定ファイルを変更して、出力を Kafka に設定します。 詳細については、「カスタム Kafka コンシューマーの開発」をご参照ください。
-
次のいずれかの方法で Kafka クラスターを準備します。
-
自己管理 Kafka クラスターをデプロイします。 詳細については、「Apache Kafka 公式ウェブサイト」をご参照ください。
警告大規模な TiDB binlog を処理するには、ブローカーパラメーターの
message.max.bytesとreplica.fetch.max.bytes、およびコンシューマーパラメーターのfetch.message.max.bytesを増やしてください。 詳細については、「Kafka 設定リファレンス」をご参照ください。 -
ApsaraMQ for Kafka
(MQ for Apache Kafka)。詳細については、「Alibaba Cloud」をご参照ください。
ApsaraMQ for Kafkaクイックスタート」をご参照ください。
説明ネットワーク遅延を最小限に抑えるために、ソースデータベースサーバーと同じ VPC に Message Queue for Apache Kafka インスタンスをデプロイしてください。
-
-
自己管理 Kafka クラスターまたは ApsaraMQ for Kafka インスタンスにトピックを作成します。
-
DTS サーバーの CIDR ブロックを TiDB データベースのホワイトリストに追加します。 特定の CIDR ブロックについては、「DTS サーバーの CIDR ブロックをホワイトリストに追加する」をご参照ください。
操作手順
-
データ同期タスクを購入します。 詳細については、「購入手順」をご参照ください。
説明タスクを購入する際、TiDB を [TiDB] に、[宛先インスタンス] を [AnalyticDB for MySQL] に設定します。
-
DTS コンソールにログインします。
説明自動的に Data Management (DMS) コンソールにリダイレクトされた場合は、右下隅の
アイコンをクリックし、
をクリックして従来の DTS コンソールに戻ることができます。 -
左側のナビゲーションウィンドウで、データ同期 をクリックします。
-
データ同期 ページの上部で、データ同期インスタンスが存在するリージョンを選択します。
-
購入したデータ同期インスタンスを見つけ、[同期タスクを設定] をクリックします。
-
同期チャネルのソースインスタンスと宛先インスタンスを設定します。
-
タスク名とソースインスタンスを設定します。

パラメーター
説明
同期タスク名
DTS は自動的にタスク名を生成します。 簡単に識別できるように、わかりやすい名前を指定してください。 名前は一意である必要はありません。
インスタンスタイプ
ソースデータベースがデプロイされている場所を選択します。 この例では、[ECS インスタンス内のユーザー作成データベース] を使用します。
説明自己管理データベースが異なるインスタンスタイプの場合、追加の準備が必要になることがあります。 詳細については、「データ移行の準備」をご参照ください。
インスタンスリージョン
DTS インスタンスを購入したときに選択したリージョンです。 変更できません。
データベースタイプ
TiDB に修正されました。
ポート番号
TiDB データベースのサービスポートを入力します。デフォルト: 4000。
データベースアカウント
TiDB データベースのデータベースアカウントを入力します。 アカウントには、同期するオブジェクトに対する SHOW VIEW および SELECT 権限が必要です。 詳細については、「権限管理」をご参照ください。
データベースのパスワード
データベースアカウントのパスワードを入力します。
Kafka クラスタータイプ
Kafka クラスターのデプロイ場所を選択します。 この例では、[ECS インスタンス内のユーザー作成データベース] を使用します。 他のインスタンスタイプの場合、追加の準備が必要です。 詳細については、「準備の概要」をご参照ください。
説明DTS は現在、Alibaba Cloud を直接選択することをサポートしていないため
ApsaraMQ for KafkaAlibaba Cloud メッセージキュー for Kafka インスタンスを使用している場合は、自己管理 Kafka クラスターとして設定し、[Express Connect/VPN ゲートウェイ/Smart Access Gateway 経由で接続された自己管理データベース] を選択してから、インスタンスが配置されている VPC を選択します。
インスタンスリージョン
ソースインスタンスのリージョンと同じである必要があります。 変更できません。
ECS インスタンス ID
自己管理 Kafka クラスターが配置されている Elastic Compute Service (ECS) インスタンスの ID を選択します。
Kafka ポート番号
自己管理 Kafka クラスターのサービスポート。 デフォルト: 9092。
Kafka クラスターアカウント
自己管理 Kafka クラスターのユーザー名を入力します。 認証が有効になっていない場合は、空白のままにします。
Kafka クラスターのパスワード
ユーザー名のパスワードを入力します。 認証が有効になっていない場合は、空白のままにします。
トピック
右側の [トピックリストを取得] をクリックし、ドロップダウンリストからトピックを選択します。
Kafka バージョン
自己管理 Kafka クラスターのバージョンを選択します。
Kafka クラスター接続方法
ビジネス要件とセキュリティ要件に基づいて、非暗号化 または SCRAM-SHA-256 を選択します。
-
宛先インスタンスを設定します。

パラメーター
説明
インスタンスタイプ
[AnalyticDB] に固定されています。
インスタンスリージョン
DTS インスタンスを購入したときに選択したリージョンです。 変更できません。
バージョン
[3.0] に固定されています。
データベース
宛先の AnalyticDB for MySQL クラスターのクラスター ID を選択します。
データベースアカウント
AnalyticDB for MySQL クラスターのデータベースアカウントを入力します。 アカウントには、ターゲットデータベースに対する読み取りおよび書き込み権限が必要です。 詳細については、「データベースアカウントの作成」をご参照ください。
データベースのパスワード
データベースアカウントに対応するパスワードを入力します。
-
-
ページ右下の [ホワイトリストを設定して次へ] をクリックします。
ソースまたは宛先データベースが ApsaraDB RDS for MySQL や ApsaraDB for MongoDB インスタンスなどの Alibaba Cloud データベースインスタンスである場合、DTS は自動的に DTS サーバーの CIDR ブロックをインスタンスの IP アドレスホワイトリストに追加します。 ソースまたは宛先データベースが ECS インスタンスでホストされている自己管理データベースである場合、DTS は自動的に DTS サーバーの CIDR ブロックを ECS インスタンスのセキュリティグループルールに追加し、ECS インスタンスがデータベースにアクセスできることを確認する必要があります。 自己管理データベースが複数の ECS インスタンスでホストされている場合は、各 ECS インスタンスのセキュリティグループルールに DTS サーバーの CIDR ブロックを手動で追加する必要があります。 ソースまたは宛先データベースがデータセンターにデプロイされているか、サードパーティのクラウドサービスプロバイダーによって提供されている自己管理データベースである場合は、DTS がデータベースにアクセスできるように、データベースの IP アドレスホワイトリストに DTS サーバーの CIDR ブロックを手動で追加する必要があります。 詳細については、「DTS サーバーの IP アドレスをホワイトリストに追加する」をご参照ください。
警告DTS サーバーのパブリック IP アドレスの CIDR ブロックを自動または手動で追加すると、セキュリティリスクが生じる可能性があります。 この製品を使用することにより、これらの潜在的なリスクを認識し、受け入れるものとします。 基本的なセキュリティ保護を実装する必要があります。 これらの保護には、パスワードセキュリティの強化、CIDR ブロックのオープンポートの制限、内部 API 通信での認証の使用、不要な CIDR ブロックの定期的な確認と制限などが含まれますが、これらに限定されません。 または、専用回線、VPN Gateway、Smart Access Gateway などの内部ネットワーク経由でデータベースに接続することもできます。
-
同期ポリシーとオブジェクトを設定します。
パラメーター
説明
初期同期タイプを選択
デフォルトでは、[初期スキーマ同期] と [初期完全データ同期] の両方が選択されています。 事前チェック後、DTS は宛先クラスター内のターゲットオブジェクトのスキーマとデータを初期化し、増分同期のベースラインとして使用します。
競合するテーブルの処理モードを選択
-
エラーの事前チェックと報告: ターゲットデータベースに同じ名前のテーブルが存在するかどうかを確認します。 存在しない場合、事前チェックは合格します。 存在する場合、事前チェックはエラーを報告し、タスクは開始されません。
説明ターゲットデータベース内の競合するテーブルを削除または名前変更できない場合は、オブジェクト名マッピング機能を使用して名前を変更します。 詳細については、「宛先インスタンスでの同期オブジェクト名の設定」をご参照ください。
-
エラーを無視して続行: ターゲットデータベース内の同じ名前のテーブルのチェックをスキップします。
警告エラーを無視して続行 を選択すると、データの不整合やビジネスリスクが発生する可能性があります。
-
スキーマが同一の場合、ターゲットデータベースのレコードがソースレコードと同じプライマリキーを持つ場合、ターゲットレコードは保持され、ソースレコードは同期されません。
-
スキーマが一致しない場合、データ初期化が失敗したり、一部の列のみが同期されたり、タスクが失敗したりする可能性があります。
-
テーブルをマージするかどうかを指定
-
○ を選択: DTS は、各テーブルに
__dts_data_sourceという名前の列を追加して、データソースを保存します。 この場合、DDL 同期はサポートされません。 -
× を選択: これはデフォルトのオプションです。 DDL 同期がサポートされます。
説明テーブルのマージは、テーブルレベルではなくタスクレベルで設定されます。 一部のテーブルをマージし、他のテーブルをマージしない場合は、別々の同期タスクを作成してください。
同期する操作タイプを選択
ビジネス要件に基づいて同期する操作タイプを選択します。 詳細については、「サポートされる SQL 操作」をご参照ください。 デフォルトでは、すべての操作タイプが選択されています。
同期するオブジェクトを選択
ソースオブジェクト ボックスで、同期するオブジェクトをクリックし、
アイコンをクリックして 選択中のオブジェクト ボックスに移動します。同期オブジェクトとしてデータベースまたはテーブルを選択できます。
説明-
データベース全体を同期オブジェクトとして選択した場合、そのデータベース内のオブジェクトに対するすべてのスキーマ変更が宛先に同期されます。
-
特定のテーブルを選択した場合、そのテーブルに対する ADD COLUMN 操作のみが宛先に同期されます。
-
デフォルトでは、同期されたオブジェクト名は変更されません。 宛先クラスターで異なる名前を使用するには、オブジェクト名マッピング機能を使用します。 詳細については、「宛先インスタンスでの同期オブジェクト名の設定」をご参照ください。
データベースとテーブルの名前を変更
宛先インスタンスで同期されたオブジェクトの名前を変更します。 詳細については、「データベース、テーブル、列のマッピング」をご参照ください。
DMS が DDL 操作を実行するときに一時テーブルをレプリケート
Data Management (DMS) を使用してソースデータベースでオンライン DDL 変更を実行する場合、DDL 変更によって生成された一時テーブルを同期するかどうかを選択できます。
-
○: オンライン DDL 変更によって生成された一時テーブルを同期します。
説明オンライン DDL 変更によって大量の一時テーブルデータが生成されると、データ同期タスクが遅延する可能性があります。
-
いいえ: オンライン DDL 変更によって生成された一時テーブルを同期しません。 ソースデータベースからの元の DDL 操作のみが同期されます。
説明このオプションを選択すると、ターゲットデータベースのテーブルがロックされます。
接続失敗時のリトライ時間
DTS がソースまたは宛先インスタンスに接続できない場合、デフォルトで 720 分 (12 時間) リトライします。 カスタムのリトライ時間を指定することもできます。 指定された時間内に DTS がソースまたは宛先インスタンスに再接続すると、同期タスクは自動的に再開されます。 そうでない場合、タスクは失敗します。
説明接続リトライ中のタスク実行時間に対して課金されます。 ビジネスニーズに応じてリトライ時間をカスタマイズするか、ソースおよび宛先インスタンスがリリースされたらすぐに DTS インスタンスをリリースしてください。
-
-
上記の設定が完了したら、ページ右下の 次へ をクリックします。
-
ターゲットデータベースのテーブルタイプを設定します。
説明[初期スキーマ同期] を選択した場合、AnalyticDB for MySQL のテーブルに対して タイプ、[プライマリキー列]、および [パーティションキー列] を定義する必要があります。 詳細については、CREATE TABLE リファレンス をご参照ください。
-
上記の設定が完了したら、ページ右下の [事前チェックして開始] をクリックします。
説明-
同期タスクが開始される前に事前チェックが実行され、合格した場合にのみタスクを開始できます。
-
事前チェックが失敗した場合は、失敗した項目の横にある
アイコンをクリックして詳細を表示します。-
原因に基づいて問題を修正し、再度事前チェックを実行できます。
-
警告をトリガーした項目を修正する必要がない場合は、無視 または [警告を無視して事前チェックを再実行] をクリックして警告をスキップし、再度事前チェックを実行できます。
-
-
-
事前チェック ダイアログボックスに 事前チェック完了 と表示されたら、事前チェック ダイアログボックスを閉じます。 同期タスクが開始されます。
-
タスクの初期化が完了し、同期中 状態になるまで待ちます。
データ同期 ページでデータ同期タスクのステータスを表示できます。