Data Transmission Service (DTS) は、セルフマネージド TiDB データベースから AnalyticDB for MySQL 3.0 クラスターへデータを移行します。DTS は、スキーマ移行、完全データ移行、および増分データ移行をサポートします。
仕組み
移行は、最大 3 つのフェーズで順次実行されます。
スキーマ移行 — DTS は、テーブル定義を移行先クラスターにレプリケートします。
完全データ移行 — DTS は、TiDB から既存のすべてのデータを読み取り、AnalyticDB for MySQL 3.0 にロードします。
増分データ移行 (オプション) — DTS は、Kafka クラスターから変更イベントを読み取って移行先に適用し、カットオーバー中のソースと移行先の同期を維持します。
実行方法を選択してください。
完全移行 + 増分移行: 前提条件 を完了してから 増分データ収集の設定 に進み、その後 移行タスクの作成 に進んでください。
前提条件
作業を開始する前に、以下を実施してください。
利用可能なストレージがソース TiDB データベースの合計データサイズより大きい、AnalyticDB for MySQL 3.0 クラスターを作成します。詳細については、「クラスターの作成」をご参照ください。
必要な権限 に記載されている、必要なデータベースアカウント権限を付与します。
(増分移行のみ) Kafka クラスターを設定します。詳細については、「増分データ収集の設定」をご参照ください。
必要な権限
データベース | 必要な権限 |
TiDB データベース | 移行対象オブジェクトの |
AnalyticDB for MySQL 3.0 クラスター | 移行先データベースの読み取りおよび書き込み権限。詳細については、「データベースアカウントの作成」をご参照ください。 |
課金
移行タイプ | インスタンス構成料金 | インターネットトラフィック料金 |
スキーマ移行および完全データ移行 | 無料 | 移行先の [アクセス方法] が [パブリック IP アドレス] の場合にのみ課金されます。詳細については、「料金概要」をご参照ください。 |
増分データ移行 | 課金されます。詳細については、「料金概要」をご参照ください。 |
増分データ収集の設定
スキーマ移行および完全データ移行のみが必要な場合は、このセクションをスキップしてください。
増分データ移行では、TiDB から Kafka クラスターへ変更イベントをストリーミングする必要があります。TiDB のバージョンに応じて、以下のいずれかの方法を選択してください。
方法の選択
方法 | 使用する場合 |
TiDB Binlog | binlog レプリケーションに Pump と Drainer を既に使用している TiDB クラスター |
TiCDC | TiDB v4.0 以降。新規デプロイメントに推奨します。 |
Kafka パラメータの構成
DTS に接続する前に、以下の Kafka パラメータを増やしてください。これらの変更を行わないと、Kafka クラスターが TiDB からの大きなバイナリログペイロードを拒否する可能性があります。
コンポーネント | パラメータ | アクション |
Kafka ブローカー |
| TiDB バイナリログメッセージに対応するために増やします |
Kafka ブローカー |
|
|
Kafka コンシューマー |
| ブローカーの |
Kafka クラスターの準備
以下のいずれかのオプションを使用してください。
セルフマネージド Kafka クラスター — 独自のクラスターをデプロイします。詳細については、「Apache Kafka 公式ウェブサイト」をご参照ください。
ApsaraMQ for Kafka インスタンス — マネージドインスタンスを作成します。詳細については、「はじめに概要」をご参照ください。インスタンスは、TiDB データベースサーバーと同じ仮想プライベートクラウド (VPC) にデプロイしてください。
ネットワークレイテンシを最小限に抑えるため、TiDB データベースサーバー、Pump (TiDB Binlog を使用する場合)、Drainer、および Kafka クラスターを同じ内部ネットワークにデプロイしてください。
Kafka クラスターの準備が整ったら、[パーティション数 1] でトピックを作成します。DTS はパーティション ID 0 からのみ読み取ります。追加のパーティションはデータ損失の原因となります。
TiDB Binlog の使用
TiDB データベースと同じ内部ネットワーク内のサーバーに Pump と Drainer をデプロイします。詳細については、「TiDB Binlog クラスターのデプロイ」をご参照ください。
Drainer 構成ファイルを編集して、Kafka クラスターを指すようにします。詳細については、「Binlog コンシューマークライアントユーザーガイド」をご参照ください。
TiDB サーバーが Kafka クラスターに到達できることを確認します。
DTS サーバーの CIDR ブロックを TiDB データベースの許可リストに追加します。詳細については、「DTS サーバーの CIDR ブロックの追加」をご参照ください。
TiCDC の使用
TiUP を使用して TiCDC をインストールし、TiDB クラスターに新しい TiCDC ノードを追加するか、既存のノードをスケールアウトします。詳細については、「TiCDC のデプロイと保守」をご参照ください。
増分データを Kafka にレプリケートするチェンジフィードを作成します。開始コマンドとして
tiup cdc cli changefeed createを使用してください。詳細については、「Kafka へのデータのレプリケート」をご参照ください。TiDB サーバーが Kafka クラスターに到達できることを確認します。
制限事項
タスクを開始する前に、これらの制限事項を確認してください。
ソースデータベース
TiDB サーバーには、十分なアウトバウンド帯域幅が必要です。帯域幅が低いと、移行速度が低下します。
移行対象のテーブルには、
PRIMARY KEY、またはすべての列が一意であるUNIQUE制約が必要です。これらの制約がないテーブルは、移行先で重複レコードを生成する可能性があります。移行中にテーブルまたは列の名前を変更する場合、1 つのタスクで最大 1,000 個のテーブルをサポートします。1,000 個を超えるテーブルの場合は、移行を複数のタスクに分割するか、データベース全体を 1 つのタスクで移行してください。
ソース TiDB データベースから増分データを移行するには、Kafka クラスターのデプロイと、増分データを収集するための関連コンポーネントのインストールが必要です。
プレフィックスインデックスは移行できません。ソースデータベースにプレフィックスインデックスが含まれている場合、移行タスクが失敗する可能性があります。
増分移行
DTS は、Kafka トピックのパーティション ID 0 からのみデータを読み取ります。トピックは、1 つのパーティションで構成してください。
増分移行タスクを作成した後は、速やかにソースデータベースで操作を実行するか、テストデータを挿入して、タスクのオフセット情報を更新してください。最初のデータイベントまでの遅延が長いと、タスクが失敗する可能性があります。
移行先とタスクの動作
移行先データベースでカスタムプライマリキーを指定するか、「データベース、テーブル、および列の構成」ステップで[プライマリキー列]を設定します。プライマリキーが設定されていないと、データ移行は失敗します。
DTS タスクの実行中に AnalyticDB for MySQL 3.0 クラスターのバックアップが実行されている場合、タスクは失敗する可能性があります。
AnalyticDB for MySQL 3.0 ノードのディスク使用率が 80% を超えると、移行タスクが遅延し、エラーが発生する可能性があります。開始前に必要なディスク容量を見積もってください。
完全データ移行は、ソースと移行先の両方のデータベースの負荷を増加させます。CPU 負荷が 30% 未満のオフピーク時間帯に移行を実行してください。
完全データ移行は、並行
INSERT操作を使用するため、移行先テーブルでフラグメンテーションが発生します。完全移行の完了後、移行先のテーブルスペースサイズはソースより大きくなります。移行中に他のソースが移行先に書き込むと、データの不整合が発生する可能性があります。
DTS は、FLOAT と DOUBLE の値を取得するために
ROUND(COLUMN,PRECISION)関数を使用します。デフォルトの精度は、FLOAT では 38 桁、DOUBLE では 308 桁です。開始する前に、これらのデフォルトがお客様の要件を満たすことを確認してください。スキーマ移行中、DTS は、移行先 AnalyticDB for MySQL インスタンスへのマテリアライズドビューの移行をサポートしていません。マテリアライズドビューを使用する場合は、移行完了後に移行先インスタンスで手動で作成してください。
DTS は、失敗したタスクを最大 7 日間、自動的に再開しようとします。 ワークロードを移行先に切り替える前に、失敗したタスクを停止または解放するか、
REVOKEステートメントを実行して DTS アカウントから書き込み権限を削除してください。 そうしないと、再開されたタスクが移行先のデータを上書きする可能性があります。移行先で DDL ステートメントが失敗した場合でも、DTS タスクは実行を継続します。失敗した DDL ステートメントは、タスクログで確認してください。詳細については、「タスクログの表示」をご参照ください。
DTS タスクが失敗した場合、DTS テクニカルサポートは 8 時間以内に復元を試みます。復元中、タスクが再起動され、タスクパラメータ (データベースパラメータではありません) が変更される場合があります。変更される可能性のあるパラメータのリストについては、「インスタンスパラメータの変更」をご参照ください。
増分移行でサポートされる SQL 操作
操作タイプ | サポートされるステートメント |
DML |
|
DDL |
|
データ型マッピング
TiDB と AnalyticDB for MySQL 3.0 のデータ型間の完全なマッピングについては、「異種データベース間のデータ型マッピング」をご参照ください。
移行タスクの作成
ステップ 1:データ移行ページへの移動
DTS コンソールまたは DMS コンソールのいずれかを使用します。
DTS コンソール
DTS コンソール にログオンします。
左側のナビゲーションペインで、[データ移行] をクリックします。
左上隅で、移行インスタンスを配置するリージョンを選択します。
DMS コンソール
手順は、DMS コンソールのモードとレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
DMS コンソール にログオンします。
上部のナビゲーションバーで、[データ + AI] > [DTS (DTS)] > [データ移行] を選択します。
[データ移行タスク] の右側にあるドロップダウンリストから、移行インスタンスを配置するリージョンを選択します。
ステップ 2:ソースおよび移行先データベースの構成
[タスクの作成] をクリックします。
[タスク名] を入力します。 DTS によって名前が自動的に生成されますが、後でタスクを識別しやすいように、わかりやすい名前を指定してください。
ソースデータベースを構成します。
パラメータ
説明
[既存の接続の選択]
登録されたデータベースインスタンスを選択すると、以下のパラメータが自動入力されます。空白のままにして、接続の詳細を手動で入力することもできます。
[データベースタイプ]
[TiDB] を選択します。
[アクセス方法]
TiDB のデプロイ場所に基づいてアクセス方法を選択します。この例では、[ECS 上のセルフマネージドデータベース] を使用します。他のアクセス方法については、最初に必要な環境を準備してください。詳細については、「準備概要」をご参照ください。
[インスタンスリージョン]
TiDB データベースが配置されているリージョン。
[ECS インスタンス ID]
TiDB をホストする ECS インスタンスの ID。
[ポート番号]
TiDB サービスポート。デフォルト: [4000]。
[データベースアカウント]
TiDB データベースアカウント。
[データベースパスワード]
データベースアカウントのパスワード。
[増分データの移行]
増分データ移行を行う場合は、[はい] を選択し、Kafka クラスター設定 セクションに Kafka クラスターの詳細を入力します。
移行先データベースを構成します。
パラメータ
説明
[既存の接続の選択]
登録されたインスタンスを選択すると、以下のパラメータが自動入力されます。空白のままにして、接続の詳細を手動で入力することもできます。
[データベースタイプ]
[AnalyticDB for MySQL 3.0] を選択します。
[アクセス方法]
[Alibaba Cloud インスタンス] を選択します。
[インスタンスリージョン]
移行先クラスターが配置されているリージョン。
[インスタンス ID]
移行先 AnalyticDB for MySQL 3.0 クラスターの ID。
[データベースアカウント]
移行先クラスターのデータベースアカウント。詳細については、「必要な権限」をご参照ください。
[データベースパスワード]
データベースアカウントのパスワード。
[接続テストと続行] をクリックします。[DTS サーバーの CIDR ブロック] ダイアログボックスで、[接続テスト] をクリックします。
DTS の CIDR ブロックは、ソースと移行先の両方のデータベースのセキュリティ設定に追加する必要があります。詳細については、「DTS サーバーの CIDR ブロックの追加」をご参照ください。
ステップ 3:移行対象オブジェクトの構成
[オブジェクトの構成] ページで、以下のパラメーターを設定します:
パラメータ | 説明 |
[移行タイプ] | 実行する移行タイプを選択します:[スキーマ移行]、[完全データ移行]、およびオプションで [増分データ移行]。[スキーマ移行] を選択しない場合は、タスクを開始する前に移行先のデータベースとテーブルを作成してください。[増分データ移行] を選択しない場合は、データの整合性を維持するため、移行中にソースデータベースへの書き込みを避けてください。 |
[テーブルのマージ] | [はい] を選択すると、各移行先テーブルに |
[競合するテーブルの処理モード] | [事前チェックとエラーの報告]: ソースと移行先に同じ名前のテーブルがある場合、事前チェックが失敗します。開始前に、オブジェクト名マッピング を使用して競合するテーブルの名前を変更してください。[エラーを無視して続行]: 事前チェックをスキップします。完全移行中、DTS は競合するプライマリキーの既存の移行先レコードを保持します。増分移行中、DTS はそれらを上書きします。ソースと移行先でスキーマが異なる場合、一致する列のみが移行されるか、タスクが失敗する可能性があります。 |
[移行先インスタンスのオブジェクト名の大文字小文字] | 移行先のデータベース、テーブル、および列名の大文字小文字を制御します。デフォルト:[DTS デフォルトポリシー]。詳細については、「移行先インスタンスのオブジェクト名の大文字小文字の指定」をご参照ください。 |
[ソースオブジェクト] | 移行するテーブルまたはデータベースを選択し、矢印アイコンをクリックして [選択されたオブジェクト] に移動します。 |
[選択されたオブジェクト] | オブジェクトを右クリックして、名前の変更や WHERE フィルター条件の追加ができます。[一括編集] をクリックすると、複数のオブジェクトを一度に名前変更できます。オブジェクトの名前を変更すると、依存オブジェクトの移行に失敗する可能性があります。 |
[次へ: 詳細設定]をクリックします。
ステップ 4:詳細設定の構成
パラメータ | 説明 |
[接続失敗時の再試行時間] | 接続失敗後に DTS が再試行する時間。有効範囲:10~1,440 分。デフォルト:720 分。少なくとも 30 分に設定してください。複数のタスクが同じソースまたは移行先データベースを共有する場合、最後に設定された値が適用されます。DTS は、再試行期間中もインスタンスに対して課金します。 |
[その他の問題の再試行時間] | DDL または DML の失敗後に DTS が再試行する時間。有効範囲:1~1,440 分。デフォルト:10 分。少なくとも 10 分に設定してください。[接続失敗時の再試行時間] より小さい値である必要があります。 |
[完全データ移行のスロットリングを有効にする] | フルマイグレーション中の読み取り/書き込みリソースの使用量を制限します。[ソースデータベースへの QPS (1 秒あたりのクエリ数)]、[フルデータ移行の RPS]、および [フルマイグレーションのデータ移行速度 (MB/s)] を設定します。[フルデータ移行] が選択されている場合にのみ利用可能です。 |
[増分データ移行のスロットリングを有効にする] | 増分移行中のリソース使用量を制限します。[増分データ移行の RPS] と [増分移行のデータ移行速度 (MB/s)] を設定します。[増分データ移行] が選択されている場合にのみ使用できます。 |
[環境タグ] | DTS インスタンスを識別するためのオプションのタグ。 |
[ETL の構成] | 抽出、変換、ロード (ETL) を有効にしてデータ処理ステートメントを入力するには、[はい] を選択します。 詳細については、「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。 スキップするには、[いいえ] を選択します。 |
[モニタリングとアラート] | タスクの失敗時や移行レイテンシーがしきい値を超えた場合に通知を受信するには、[はい] を選択し、アラートのしきい値と連絡先を設定します。 詳細については、「モニタリングとアラートの設定」をご参照ください。 |
ステップ 5:データ検証の構成 (オプション)
[次へ: データ検証] をクリックしてデータ検証タスクを設定します。詳細については、「データ検証タスクを設定する」をご参照ください。
ステップ 6:データベースとテーブルフィールドの構成 (オプション)
[次へ: データベースとテーブルフィールドの設定] をクリックして、宛先テーブルの [タイプ]、[プライマリキー列]、[分散キー]、[パーティションキー]、[パーティション分割ルール]、および [パーティションライフサイクル] を設定します。
このステップは、[スキーマ移行] が選択されている場合にのみ使用できます。[定義ステータス] を すべて に設定すると、すべてのテーブルを表示および編集できます。複合プライマリキーを形成するには、[プライマリキー列] で複数の列を指定し、1 つ以上を [分布キー] および [パーティションキー] として指定します。「CREATE TABLE」をご参照ください。
ステップ 7:事前チェックの実行
[次へ: タスク設定を保存して事前チェック] をクリックします。
このタスク設定の API パラメーターを表示するには、先に進む前にボタンにポインターを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
DTS は、移行を開始する前に事前チェックを実行します。事前チェックが失敗した場合:
失敗した項目の横にある[詳細の表示]をクリックして問題を解決し、[再度事前チェック]をクリックします。
無視しても問題ないアラート項目については、[アラート詳細の確認] > [無視] > [OK] の順にクリックし、次に [再事前チェック] をクリックします。アラートを無視すると、データ不整合が発生する可能性があります。
ステップ 8:インスタンスの購入とタスクの開始
成功率が 100% になるまで待ってから、[次へ: インスタンスの購入] をクリックします。
[インスタンスの購入] ページで、以下の項目を設定します。
パラメータ
説明
[リソースグループ]
移行インスタンスのリソースグループ。デフォルト:[デフォルトリソースグループ]。詳細については、「リソース管理とは」をご参照ください。
[インスタンスクラス]
インスタンスクラスは移行速度を決定します。詳細については、「データ移行インスタンスのインスタンスクラス」をご参照ください。
[Data Transmission Service (従量課金) サービス規約] を読み、同意します。
[購入して開始] をクリックし、確認ダイアログで [OK] をクリックします。
[データ移行] ページでタスクの進捗を監視します。
増分移行のないタスクは、完了すると自動的に停止します。ステータスには [完了] と表示されます。
増分移行のあるタスクは継続的に実行されます。ステータスには [実行中] と表示されます。カットオーバー後に、タスクを手動で停止する必要があります。
Kafka クラスター構成
増分データの移行が [はい] に設定されている場合、次のパラメーターで Kafka クラスターを設定してください。
パラメータ | 説明 |
[Kafka クラスタータイプ] | Kafka クラスターのデプロイ場所。この例では、ECS 上の自己管理型データベースを使用します。[Express Connect、VPN Gateway、または Smart Access Gateway] を選択した場合は、[接続済み VPC] から VPC も選択し、ドメイン名または IP を指定します。 |
[Kafka データソースコンポーネント] | 設定に応じて、[TiDB データベースのデフォルトの binlog 形式を使用する] または [TiCDC Canal-JSON 形式を使用する] を選択します。 |
[ECS インスタンス ID] | Kafka クラスターをホストする ECS インスタンスの ID。 |
[ポート番号] | Kafka サービスポート。 |
[Kafka クラスターアカウント] | Kafka のユーザー名。認証が無効になっている場合は空白のままにしてください。 |
[Kafka クラスターパスワード] | Kafka のパスワード。認証が無効になっている場合は空白のままにしてください。 |
[Kafka バージョン] | Kafka クラスターのバージョン。バージョンが 1.0 以降の場合は、[1.0] を選択します。 |
[暗号化] | セキュリティ要件に応じて、[非暗号化] または [SCRAM-SHA-256] を選択します。 |
[トピック] | 増分データを受信する Kafka トピック。 |