このトピックでは、Data Transmission Service (DTS) を使用して、自己管理 TiDB データベースから ApsaraDB RDS for MySQL インスタンスへデータを移行する方法について説明します。
移行パスを選択してください:
| パス | 手順 | 使用タイミング |
|---|---|---|
| 完全移行のみ | 前提条件 → 手順 | 短時間のメンテナンスウィンドウで実施する一括移行 |
| 完全移行 + 増分移行 | 前提条件 → 事前準備 → 手順 | ゼロダウンタイム移行;移行中もソースデータベースを稼働状態に維持 |
プライマリキーまたは一意制約(UNIQUE constraint)が設定されていないテーブルは、ターゲットデータベースに重複レコードを生成する可能性があります。移行を開始する前に、対象となるすべてのテーブルに PRIMARY KEY または UNIQUE 制約が設定されていることを確認してください。
前提条件
開始前に、以下の条件を満たしていることを確認してください。
ソース TiDB データベースの合計データサイズよりも大きな空きストレージ容量を持つ ApsaraDB RDS for MySQL インスタンス。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
(完全移行 + 増分移行の場合のみ)増分データのキャプチャのために Kafka クラスターをセットアップし、TiDB Binlog または TiCDC を構成するための「事前準備」セクションを完了しています。
事前準備(増分移行のみ)
完全なデータ移行のみを実施する場合は、このセクションをスキップしてください。
DTS は、Kafka を基盤とするパイプライン経由で TiDB の増分データを読み取ります。DTS は Kafka トピックのパーティション 0 のみから読み取るため、該当トピックにはパーティションが 1 つだけ存在する必要があります。DTS タスクを作成する前に、以下のいずれかの方法でこのパイプラインをセットアップしてください。
方法 1:TiDB Binlog
ネットワーク遅延を最小限に抑えるため、ソースデータベースサーバー、Pump、Drainer、および Kafka クラスターを同一の内部ネットワーク上にデプロイしてください。
以下のいずれかのオプションを使用して Kafka クラスターを準備します。
自己管理 Kafka クラスター:「Apache Kafka ドキュメント」を参照してください。ブローカー側で
message.max.bytesおよびreplica.fetch.max.bytesを、コンシューマー側でfetch.message.max.bytesを、TiDB のバイナリログ量を処理できる十分な値に設定してください。構成の詳細については、「CONFIGURATION」をご参照ください。ApsaraMQ for Kafka インスタンス:「Getting started overview」を参照してください。ソースデータベースサーバーと同じ VPC 上にインスタンスをデプロイしてください。
Kafka クラスターまたは ApsaraMQ for Kafka インスタンス内にトピックを作成します。
重要トピックにはパーティションが 1 つだけ存在する必要があります。DTS は ID が 0 のパーティションからのみ増分データを読み取ります。
Pump および Drainer をデプロイします。詳細については、「TiDB Binlog クラスターデプロイ」をご参照ください。
Drainer の設定ファイルを編集し、Kafka クラスターを指すように設定します。詳細については、「Binlog コンシューマークライアント ユーザーガイド」をご参照ください。
TiDB データベースサーバーが Kafka クラスターに接続できることを確認してください。
DTS サーバーの CIDR ブロックを TiDB データベースのホワイトリストに追加します。詳細については、「DTS サーバーの CIDR ブロックの追加」をご参照ください。
方法 2:TiCDC
以下のいずれかのオプションを使用して Kafka クラスターを準備します。
自己管理 Kafka クラスター:「Apache Kafka ドキュメント」を参照してください。ブローカー側で
message.max.bytesおよびreplica.fetch.max.bytesを、コンシューマー側でfetch.message.max.bytesを、TiDB のバイナリログ量を処理できる十分な値に設定してください。構成の詳細については、「CONFIGURATION」をご参照ください。ApsaraMQ for Kafka インスタンス:「Getting started overview」を参照してください。ソースデータベースサーバーと同じ VPC 上にインスタンスをデプロイしてください。
Kafka クラスターまたは ApsaraMQ for Kafka インスタンス内にトピックを作成します。
重要トピックにはパーティションが 1 つだけ存在する必要があります。DTS は ID が 0 のパーティションからのみ増分データを読み取ります。
TiCDC をインストールします。TiUP を使用して、TiDB クラスターに新しい TiCDC ノードを追加するか、既存の TiCDC ノードをスケールアウトすることを推奨します。詳細については、「TiCDC のデプロイと保守」をご参照ください。
ソース TiDB データベースの増分データを Kafka にレプリケートします。最初のコマンドラインで
tiup cdc cli changefeed create \を使用することを推奨します。詳細については、「Kafka へのデータレプリケーション」をご参照ください。TiDB データベースサーバーが Kafka クラスターに接続できることを確認してください。
必要な権限
| データベース | 必要な権限 |
|---|---|
| TiDB データベース | 移行対象オブジェクトに対する SELECT 権限および SHOW VIEW 権限 |
| ApsaraDB RDS for MySQL インスタンス | ターゲットデータベースに対する読み取りおよび書き込み権限 |
アカウントの作成および構成に関するヘルプについては、「アカウントの作成」および「アカウント権限の変更」をご参照ください。
課金
| 移行タイプ | インスタンス構成料金 | インターネットトラフィック料金 |
|---|---|---|
| スキーマ移行 + 完全なデータ移行 | 無料 | アクセス方法 を パブリック IP アドレス に設定した場合に課金されます。「課金概要」をご参照ください。 |
| 増分データ移行 | 課金されます。「課金概要」をご参照ください。 | — |
増分移行でサポートされる SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | CREATE TABLE、DROP TABLE、ALTER TABLE、RENAME TABLE、TRUNCATE TABLE、CREATE VIEW、DROP VIEW、ALTER VIEW |
注意事項
ソースデータベースの制限事項:
ソースデータベースサーバーには十分なアウトバウンド帯域幅が必要です。帯域幅が不足すると、移行速度が低下します。
テーブルには、すべてのフィールドが一意である PRIMARY KEY または一意制約(UNIQUE constraint)が必要です。これらの制約がないテーブルは、ターゲットデータベースで重複レコードを発生させる可能性があります。
テーブル名またはカラム名の変更を伴う移行では、単一タスクで最大 1,000 個のテーブルをサポートします。1,000 個を超えるテーブルを移行する場合は、複数のタスクをバッチ処理で実行するか、データベースレベルでの移行を実施してください。
増分データ移行には、TiDB Binlog または TiCDC を構成した Kafka クラスターが必要です(「事前準備」を参照)。
完全なデータ移行:
CPU 負荷が両方のデータベースで 30 % 未満のオフピーク時に移行を実行してください。完全移行中は、DTS が両方のデータベースの読み取りおよび書き込みリソースを使用します。
完全移行中に並列で INSERT 操作を実行すると、ターゲットのテーブルが断片化されます。移行完了後、ターゲットの表領域はソースより大きくなる可能性があります。
移行中に他のソースからターゲットへデータを書き込まないでください。これにより、データの不整合が発生する可能性があります。
増分データ移行:
タスクを作成した後は、速やかにソースデータベースで操作を実行するか、テストデータを挿入してください。これにより、オフセット情報が更新され、過度な遅延によるタスク失敗を防止できます。
DTS は Kafka トピックのパーティション 0 のみから増分データを読み取ります。
データ型および文字セットに関する考慮事項:
稀少な文字や絵文字(4 バイト文字)を含むデータを移行する場合、ターゲットテーブルは UTF8mb4 文字セットを使用する必要があります。スキーマ移行機能を使用する場合は、ターゲットデータベースの
character_set_serverパラメーターを UTF8mb4 に設定してください。MySQL のカラム名は大文字小文字を区別しません。大文字小文字のみが異なるカラム名を同一のターゲットテーブルに書き込むと、予期しない結果が発生する可能性があります。
DTS は FLOAT および DOUBLE 値を取得するために
ROUND(COLUMN, PRECISION)を使用します。デフォルト精度:FLOAT = 38 桁、DOUBLE = 308 桁。これらの精度設定が要件を満たすことを確認してください。
移行後の手順:
タスクの ステータス が 完了 と表示されたら、
ANALYZE TABLE <table_name>を実行して、データがディスクに書き込まれていることを確認してください。ターゲット MySQL データベースにおける HA スイッチオーバーにより、データがメモリ上にのみ存在し、データ損失を引き起こす可能性があります。DTS は失敗したタスクを最大 7 日間再開しようと試みます。ワークロードをターゲットデータベースに切り替える前に、失敗したタスクを停止またはリリースするか、REVOKE を実行して DTS のターゲットへの書き込み権限を削除してください。そうしないと、再開されたタスクがターゲットデータをソースデータで上書きする可能性があります。
ターゲットで失敗した DDL ステートメントは、DTS タスクを停止しません。失敗した DDL ステートメントはタスクログで確認できます。「タスクログの表示」をご参照ください。
DTS タスクが失敗した場合、DTS サポートが 8 時間以内に復旧を試みます。復旧中、タスクが再起動され、タスクパラメーター(データベースパラメーターではない)が変更される場合があります。変更可能なパラメーターについては、「インスタンスパラメーターの変更」をご参照ください。
ソースデータベース名が ApsaraDB RDS for MySQL の命名規則に準拠していない場合、まずターゲットデータベースを作成し、タスク設定時にオブジェクト名マッピング機能を使用して名前を変更してください。「データベースの管理」および「オブジェクト名のマッピング」をご参照ください。
移行タスクの設定および実行
ステップ 1:データ移行ページへ移動
以下のいずれかのコンソールを使用します。
DTS コンソール:
DTS コンソール にログインします。
左側のナビゲーションウィンドウで、データ移行 をクリックします。
画面左上隅で、移行インスタンスが配置されているリージョンを選択します。
Data Management Service (DMS) コンソール:
実際の手順は、DMS コンソールのモードおよびレイアウトによって異なります。「シンプルモード」および「DMS コンソールのレイアウトおよびスタイルのカスタマイズ」をご参照ください。
DMS コンソール にログインします。
上部のナビゲーションバーで、Data + AI > DTS (DTS) > データ移行 の順に移動します。
データ移行タスク の横にあるドロップダウンリストから、移行インスタンスが配置されているリージョンを選択します。
ステップ 2:タスクの作成およびソース/ターゲットデータベースの設定
タスクの作成 をクリックします。
以下のパラメーターを使用して、ソースおよびターゲットデータベースを設定します。
タスク設定:
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS タスクの名前。DTS が自動的に名前を生成しますが、タスクを容易に識別できるよう、意味のある名前を指定することを推奨します。名前は一意である必要はありません。 |
ソースデータベース:
| パラメーター | 説明 |
|---|---|
| 既存の接続を選択 | TiDB インスタンスが DTS に登録済みの場合は、一覧から選択すると、DTS が接続パラメーターを自動的に設定します。登録されていない場合は、以下のパラメーターを手動で設定してください。DMS コンソールでは、DMS データベースインスタンスの選択 一覧を使用します。 |
| データベースタイプ | TiDB を選択します。 |
| アクセス方法 | TiDB のデプロイ先に基づいてアクセス方法を選択します。この例では Self-managed Database on ECS を使用します。その他のアクセス方法の場合は、まず必要な環境設定を完了してください。「事前準備の概要」をご参照ください。 |
| インスタンスのリージョン | TiDB データベースが配置されているリージョン。 |
| ECS インスタンス ID | TiDB データベースをホストする ECS インスタンスの ID。 |
| ポート番号 | TiDB サービスポート。デフォルト: 4000。 |
| データベースアカウント | TiDB アカウント。必要な権限については、「必要な権限」をご参照ください。 |
| データベースパスワード | TiDB アカウントのパスワード。 |
| 増分データの移行 | 増分データ移行を有効にする場合は はい を選択し、「Kafka クラスターのパラメーター」セクションで Kafka クラスター情報を入力します。完全移行のみの場合は いいえ を選択します。 |
ターゲットデータベース:
| パラメーター | 説明 |
|---|---|
| 既存の接続を選択 | RDS インスタンスが DTS に登録済みの場合は、一覧から選択します。登録されていない場合は、以下のパラメーターを手動で設定してください。DMS コンソールでは、DMS データベースインスタンスの選択 一覧を使用します。 |
| データベースタイプ | MySQL を選択します。 |
| アクセス方法 | Alibaba Cloud Instance を選択します。 |
| インスタンスリージョン | ターゲットの ApsaraDB RDS for MySQL インスタンスが配置されているリージョン。 |
| Alibaba Cloud アカウント間でのデータ複製 | 同一アカウント間の移行の場合は いいえ を選択します。 |
| RDS インスタンス ID | ターゲットの ApsaraDB RDS for MySQL インスタンスの ID。 |
| データベースアカウント | ターゲットデータベースのアカウント。必要な権限については、「必要な権限」をご参照ください。 |
| データベースパスワード | ターゲットデータベースアカウントのパスワード。 |
| 暗号化 | 非暗号化 または SSL 暗号化 を選択します。SSL 暗号化を使用する場合は、タスク設定前に RDS インスタンスで SSL 暗号化を有効化してください。「クラウド証明書を使用した SSL 暗号化の有効化」をご参照ください。 |
ステップ 3:接続性のテスト
ページ下部で、接続性のテストと続行 をクリックし、DTS サーバーの CIDR ブロック ダイアログボックスで 接続性のテスト をクリックします。
DTS サーバーの CIDR ブロックは、ソースおよびターゲットデータベースのセキュリティ設定に(自動または手動で)追加する必要があります。「DTS サーバーの CIDR ブロックの追加」をご参照ください。
ステップ 4:移行対象オブジェクトの設定
オブジェクトの設定 ページで、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| 移行タイプ | 選択した移行パスに基づいて移行タイプを選択します。- スキーマ移行 + 完全なデータ移行:完全移行のみ。- スキーマ移行 + 完全なデータ移行 + 増分データ移行:ゼロダウンタイム移行のための完全移行 + 増分移行。 説明 スキーマ移行 をスキップする場合は、タスク開始前にターゲットデータベースおよびテーブルを作成し、選択済みオブジェクト でオブジェクト名マッピングを有効化してください。増分データ移行 をスキップする場合は、データ整合性を保つため、移行中にソースデータベースへの書き込みを停止してください。 |
| 競合するテーブルの処理モード | 事前チェックおよびエラー報告(推奨):ソースおよびターゲットに同名のテーブルが存在する場合、事前チェックが失敗します。競合するテーブルの名前を変更するには、オブジェクト名マッピングを使用してください。「オブジェクト名のマッピング」をご参照ください。エラーを無視して続行:同名のテーブルに対する事前チェックをスキップします。注意して使用してください。これにより、データの不整合が発生する可能性があります。完全移行中は、ターゲットに既存のレコードが保持されます。増分移行中は、既存のレコードが上書きされます。スキーマが異なる場合、特定のカラムのみが移行されるか、タスクが失敗する可能性があります。 |
| ターゲットインスタンスにおけるオブジェクト名の大文字小文字の処理 | ターゲットにおけるデータベース名、テーブル名、カラム名の大文字小文字の処理を制御します。DTS のデフォルトポリシー がデフォルトで選択されています。「ターゲットインスタンスにおけるオブジェクト名の大文字小文字の指定」をご参照ください。 |
| ソースオブジェクト | ソースオブジェクト セクションからテーブルまたはデータベースを選択し、 |
| 選択済みオブジェクト | - 単一オブジェクトの名前を変更するには、選択済みオブジェクト 内で右クリックします。「単一オブジェクトの名前のマッピング」をご参照ください。- 複数のオブジェクトを一度に名前変更するには、一括編集 をクリックします。「複数のオブジェクト名を一度にマッピング」をご参照ください。- 行をフィルターするには、テーブルを右クリックし、「フィルター条件の指定」を行います。 説明 オブジェクトの名前を変更すると、それらに依存する他のオブジェクトが破損する可能性があります。 |
ステップ 5:高度な設定の構成
次へ:高度な設定 をクリックし、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| 失敗した接続の再試行時間 | タスク開始後に失敗した接続を DTS が再試行する時間です。有効範囲:10~1,440 分。デフォルト:720 分。最低でも 30 分以上に設定してください。この期間内に再接続が成功すればタスクは再開されますが、失敗した場合はタスクが終了します。 説明 複数のタスクが同一のソースまたはターゲットデータベースを共有する場合、最も最近設定された再試行時間がすべてのタスクに適用されます。再試行中は、インスタンス使用料金が課金されます。 |
| その他の問題の再試行時間 | 失敗した DDL または DML 操作を DTS が再試行する時間です。有効範囲:1~1,440 分。デフォルト:10 分。最低でも 10 分以上に設定してください。この値は 失敗した接続の再試行時間 より小さくする必要があります。 |
| 完全なデータ移行のスロットリングの有効化 | 完全移行中のリソース使用量を制限し、データベースへの負荷を軽減します。ソースデータベースへのクエリ数(QPS)、完全データ移行の RPS、完全移行のデータ移行速度(MB/s) を構成します。完全なデータ移行 が選択されている場合にのみ利用可能です。 |
| 増分データ移行のスロットリングの有効化 | 増分移行中のリソース使用量を制限します。増分データ移行の RPS および 増分移行のデータ移行速度(MB/s) を構成します。増分データ移行 が選択されている場合にのみ利用可能です。 |
| 環境タグ | DTS インスタンスを識別するための任意のタグです。 |
| ETL の構成 | 抽出・変換・書き出し(ETL)機能を有効化して、移行中にデータを変換します。はい を選択し、コードエディタに処理ステートメントを入力します。「ETL とは」および「ETL の構成」をご参照ください。 |
| モニタリングとアラート | タスク失敗または移行遅延がしきい値を超えた場合のアラートを設定します。はい を選択し、アラートのしきい値および通知設定を構成します。「モニタリングおよびアラートの設定」をご参照ください。 |
ステップ 6:データ検証の構成(任意)
次のステップ:データ検証 をクリックして、データ検証タスクを設定します。詳細については、「データ検証タスクの構成」をご参照ください。
ステップ 7:設定の保存および事前チェックの実行
このタスクをプログラムで構成するための API パラメーターをプレビューするには、次へ:タスク設定の保存および事前チェック の上にカーソルを合わせて、OpenAPI パラメーターのプレビュー をクリックします。
続行するには、次へ:タスク設定の保存および事前チェック をクリックします。
移行開始前に DTS が事前チェックを実行します。事前チェックが通過するまで、タスクは開始できません。
事前チェックが失敗した場合は、失敗項目の横にある 詳細の表示 をクリックし、問題を解決してから 再チェック をクリックしてください。
事前チェックのアラートについて:無視できないアラートの場合は、問題を修正して再チェックを実行してください。無視できるアラートの場合は、アラートの詳細の確認 をクリックし、その後 無視、OK、再チェック の順にクリックしてください。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 8:インスタンスの購入および移行の開始
成功率 が 100 % に達したら、次へ:インスタンスの購入 をクリックします。
インスタンスの購入 ページで、以下のパラメーターを設定します。
パラメーター 説明 リソースグループ 移行インスタンスのリソースグループ。デフォルト: デフォルト リソースグループ。「Resource Management とは? インスタンスクラス 移行速度はインスタンスクラスに依存します。「データ移行インスタンスのインスタンスクラス」を参照して、ワークロードに適したクラスを選択してください。 Data Transmission Service (従量課金) サービス利用規約 を確認し、チェックボックスをオンにして同意してください。
購入および開始 をクリックし、確認ダイアログで OK をクリックします。
データ移行 ページでタスクを監視します。
完全移行のみ:タスクは完了時に自動的に停止します。ステータス は 完了 と表示されます。
完全移行 + 増分移行:タスクは継続して実行されます。ステータス は 実行中 と表示されます。
Kafka クラスターのパラメーター
増分データの移行 を はい に設定した場合、ソースデータベースセクションで Kafka クラスターを構成します。
| パラメーター | 説明 |
|---|---|
| Kafka クラスタータイプ | Kafka クラスターのデプロイ場所。この例では Self-managed Database on ECS を使用します。Express Connect、VPN Gateway、または Smart Access Gateway を選択した場合は、接続済み VPC から VPC を選択し、ドメイン名または IP を指定してください。 |
| Kafka データソースコンポーネント | 「事前準備」で使用した方法に基づいて選択します:TiDB データベースのデフォルト binlog 形式を使用します。(TiDB Binlog)または TiCDC Canal-JSON 形式を使用します。(TiCDC)。 |
| ECS インスタンス ID | Kafka クラスターをホストする ECS インスタンスの ID。 |
| ポート番号 | Kafka サービスポート。 |
| Kafka クラスターのアカウント | Kafka ユーザー名。認証が有効でない場合は空白のままにしてください。 |
| Kafka クラスターのパスワード | Kafka パスワード。認証が有効でない場合は空白のままにしてください。 |
| Kafka バージョン | Kafka のバージョン。バージョンが 1.0 以降の場合は、1.0 を選択します。 |
| 暗号化 | セキュリティ要件に応じて、非暗号化 または SCRAM-SHA-256 を選択します。 |
| トピック | 増分データを受信するトピック。トピックにはパーティションが 1 つだけ存在する必要があります。 |
次のステップ
移行タスクのステータスが 完了 と表示された場合、または増分移行の遅延がゼロになった場合、アプリケーションをターゲットデータベースに切り替えます。
ソース TiDB データベースへの書き込みを停止します。
増分移行の遅延がゼロになり、タスクが残りの変更をすべて処理するのを待ちます。
アプリケーションの接続文字列を、ApsaraDB RDS for MySQL インスタンスを指すように更新します。
データ整合性を確認するために、重要なテーブルに対して
ANALYZE TABLE <table_name>を実行します。DTS 移行タスクを停止またはリリースします。