このトピックでは、data Transmission Service (DTS) を使用して、自己管理型TiDBデータベースからApsaraDB RDS for MySQLインスタンスに増分データを移行する方法について説明します。 増分データ移行により、Alibaba Cloudにデータを移行する際にサービスの継続性を確保できます。 この例では、Pump、Drainer、およびKafkaクラスターがデプロイされています。
前提条件
増分データを移行する前に、自己管理型TiDBデータベースからApsaraDB RDS for MySQLインスタンスに履歴データを移行できます。 詳細については、「セルフマネージドTiDBデータベースからApsaraDB RDS For MySQLインスタンスへのフルデータの移行」をご参照ください。
ターゲットApsaraDB RDS for MySQLインスタンスが作成されました。 詳細については、「ApsaraDB RDS For MySQLインスタンスの作成」をご参照ください。
ターゲットApsaraDB RDS for MySQLインスタンスは、中国 (杭州) 、中国 (上海) 、中国 (青島) 、中国 (北京) 、中国 (深セン) 、中国 (張家口) 、中国 (香港) 、シンガポール (シンガポール) 、米国 (シリコンバレー) 、または米国 (バージニア) リージョンに存在する必要があります。
ターゲットApsaraDB RDS for MySQLインスタンスの使用可能なストレージ容量は、自己管理型TiDBデータベースのデータの合計サイズよりも大きい必要があります。
背景情報
TiDBデータベースのバイナリログ形式と実装メカニズムは、MySQLデータベースのものとは異なります。 増分データを移行し、ソースTiDBデータベースへの変更を最小限に抑えるには、Pump、Drainer、およびKafkaクラスターをデプロイする必要があります。
Pumpは、TiDBで生成されたバイナリログファイルをリアルタイムで記録し、バイナリログファイルをDrainerに送信します。 Drainerは、バイナリログファイルを下流のKafkaクラスターに書き込みます。 増分データ移行中、DTSはKafkaクラスターからデータを取得し、そのデータをリアルタイムで移行先データベースに移行します。 たとえば、DTSは増分データをApsaraDB RDS For MySQLインスタンスに移行できます。
制限事項
DTSは、完全データ移行中にソースデータベースとターゲットデータベースの読み取りおよび書き込みリソースを使用します。 これは、データベースサーバの負荷を増加させる可能性がある。 データベースのパフォーマンスが悪い場合、仕様が低い場合、またはデータ量が多い場合、データベースサービスが利用できなくなる可能性があります。 たとえば、ソースデータベースで多数の低速SQLクエリが実行されている場合、テーブルにプライマリキーがない場合、またはターゲットデータベースでデッドロックが発生する場合、DTSは大量の読み取りおよび書き込みリソースを占有します。 データを移行する前に、移行元データベースと移行先データベースのパフォーマンスに対するデータ移行の影響を評価します。 オフピーク時にデータを移行することを推奨します。 たとえば、ソースデータベースとターゲットデータベースのCPU使用率が30% 未満の場合にデータを移行できます。
移行元データベースで移行するテーブルには、PRIMARY KEYまたはUNIQUE制約が必要であり、すべてのフィールドが一意である必要があります。 そうでない場合、宛先データベースは重複するデータレコードを含み得る。
DTSは
ROUND(COLUMN,PRECISION)
関数を使用して、FLOATまたはDOUBLEデータ型の列から値を取得します。 精度を指定しない場合、DTSはFLOATデータ型の精度を38桁に設定し、DOUBLEデータ型の精度を308桁に設定します。 業務要件を満足する精度が設定されていることを確認する必要があります。DTSは、ApsaraDB RDS for MySQLインスタンスにターゲットデータベースを自動的に作成します。 ただし、ソースデータベースの名前が無効な場合は、データ移行タスクを設定する前に、ApsaraDB RDS for MySQLインスタンスにデータベースを手動で作成する必要があります。
説明ApsaraDB RDS For MySQLデータベースのデータベース命名規則とデータベースの作成方法の詳細については、 データベースの管理
データ移行タスクが失敗した場合、DTSは自動的にタスクを再開します。 ワークロードをターゲットインスタンスに切り替える前に、データ移行タスクを停止またはリリースします。 それ以外の場合、タスクの再開後、ソースデータベースのデータがターゲットインスタンスのデータを上書きします。
課金ルール
移行タイプ | タスク設定料金 | インターネットトラフィック料金 |
スキーマ移行とフルデータ移行 | 無料です。 | インターネット経由でAlibaba Cloudからデータが移行された場合にのみ課金されます。 詳細については、「課金の概要」をご参照ください。 |
増分データ移行 | 有料。 詳細については、「課金の概要」をご参照ください。 |
移行タイプ
移行タイプ | 説明 |
スキーマの移行 | DTSは、必要なオブジェクトのスキーマをターゲットデータベースに移行します。 DTSは、ビュー、テーブル、およびデータベースのスキーマ移行をサポートします。 警告 TiDBとMySQLは異種データベースです。 DTSは、スキーマ移行後にソースデータベースとターゲットデータベースのスキーマが一貫していることを保証しません。 データ型変換がビジネスに与える影響を評価することを推奨します。 詳細については、「異種データベース間のデータ型マッピング」をご参照ください。 |
フルデータ移行 | DTSは、必要なオブジェクトの履歴データをターゲットデータベースに移行します。 説明 完全データ移行中、同時INSERT操作により、ターゲットデータベースのテーブルが断片化されます。 完全データ移行が完了すると、移行先データベースの使用表領域のサイズが移行元データベースのサイズよりも大きくなります。 |
増分データ移行 | DTSは、TiDBで生成されたバイナリログファイルをKafkaクラスターから取得し、増分データをターゲットデータベースにリアルタイムで移行します。 増分データ移行中に、次のSQL操作を同期できます。
増分データ移行により、自己管理型TiDBデータベースからAlibaba Cloudにデータを移行する際に、サービスの継続性を確保できます。 |
準備
ソースデータベースがデプロイされているサーバーは、Pump、Drainer、およびKafkaクラスターがデプロイされているサーバーと同じ内部ネットワークにある必要があります。 これにより、増分データ移行タスクに対するネットワーク遅延の影響が最小限に抑えられます。
ポンプと水切りを展開します。 詳細については、「TiDB Binlogクラスターのデプロイ」をご参照ください。
Drainerの設定ファイルを変更し、Drainerからデータを受信するKafkaクラスターを指定します。 詳細については、「Binlog Slave Clientユーザーガイド」をご参照ください。
次のいずれかの方法を使用してKafkaクラスターをデプロイします。
自己管理Kafkaクラスターをデプロイします。 詳細については、Apache Kafka公式Webサイトをご覧ください。
警告Kafkaブローカーの
message.max.bytes
およびreplica.fetch.max.bytes
パラメーターと、Kafkaコンシューマーのfetch.message.max.bytes
パラメーターをより大きな値に設定することを推奨します。 これにより、KafkaクラスターはTiDBで生成されたバイナリログファイルを確実に受け取ることができます。 詳細については、「Kafka 2.5ドキュメント」をご参照ください。Message Queue for Apache Kafkaインスタンスを購入してデプロイします。 詳細については、「Apache KafkaのMessage Queueのクイックスタート」をご参照ください。
説明Message Queue for Apache Kafkaインスタンスは、ソースデータベースサーバーと同じ仮想プライベートクラウド (VPC) にデプロイする必要があります。 これにより、信頼性の高いデータ送信が保証され、増分データ移行に対するネットワーク遅延の影響が最小限に抑えられます。
セルフマネージドKafkaクラスターまたはApache KafkaインスタンスのMessage Queueでトピックを作成します。
DTSサーバーのCIDRブロックをTiDBデータベースのホワイトリストに追加します。 詳細については、「DTSサーバーのCIDRブロックの追加」をご参照ください。
手順
にログインします。 DTSコンソール。
説明データ管理 (DMS) コンソールにリダイレクトされている場合は、にあるアイコンをクリックして、以前のバージョンのDTSコンソールに移動し。
左側のナビゲーションウィンドウで、[データ移行] をクリックします。
[移行タスク] ページの上部で、移行先クラスターが存在するリージョンを選択します。
ページの右上隅にある [移行タスクの作成] をクリックします。
ソースデータベースとターゲットデータベースを設定します。
タスク名とソースデータベースを設定します。
パラメーター
説明
タスク名
DTSが自動的に生成するタスク名。 タスクを簡単に識別できるように、わかりやすい名前を指定することをお勧めします。 一意のタスク名を指定する必要はありません。
インスタンスタイプ
ソースデータベースのアクセス方法。 この例では、ECSインスタンスのユーザー作成データベースが選択されています。
説明他のインスタンスタイプを選択した場合、自己管理データベースのネットワーク環境をデプロイする必要があります。 詳細については、「準備の概要」をご参照ください。
インスタンスリージョン
ソースTiDBデータベースがデプロイされているElastic Compute Service (ECS) インスタンスのリージョン。
データベースエンジン
[TiDB] を選択します。
ポート番号
ソースTiDBデータベースのサービスポート番号。 デフォルト値: 4000
データベースアカウント
ソースTiDBデータベースのアカウント。 アカウントには、移行するオブジェクトに対するSELECT権限とSHOW VIEW権限が必要です。
データベースパスワード
データベースアカウントのパスワードを設定します。
重要ソースデータベースに関する情報を指定した後、[データベースパスワード] の横にある [接続のテスト] をクリックして、情報が有効かどうかを確認できます。 情報が有効な場合は、[合格] メッセージが表示されます。 [失敗] メッセージが表示されたら、[失敗] の横にある [チェック] をクリックします。 次に、チェック結果に基づいて情報を変更します。
増分移行かどうか
増分データ移行を実行するかどうかを指定します。 この例では、はいが選択されています。 フルデータ移行のみを実行する方法の詳細については、「セルフマネージドTiDBデータベースからApsaraDB RDS For MySQLインスタンスへのフルデータの移行」をご参照ください。
Kafkaクラスタタイプ
Kafkaクラスターのアクセス方法。 この例では、ECSインスタンスのユーザー作成データベースが選択されています。 Kafkaクラスターが他の方法で接続されている場合は、Kafkaクラスターのネットワーク環境をデプロイする必要があります。 詳細については、「準備の概要」をご参照ください。
説明Kafka Cluster TypeパラメーターにApache KafkaのMessage Queueを選択することはできません。 Apache KafkaインスタンスにMessage Queueをデプロイする場合は、[Express Connect、VPN Gateway、またはSmart Access Gateway経由で接続されたユーザー作成データベース] を選択する必要があります。 次に、Apache KafkaインスタンスのMessage Queueが属するVPCを選択する必要があります。
インスタンスリージョン
このパラメーターの値は、ソースデータベースのリージョンと同じであり、変更することはできません。
ECS インスタンス ID
自己管理型KafkaクラスターをホストするECSインスタンスのID。
カフカポート番号
自己管理Kafkaクラスターのサービスポート番号。 デフォルト値: 9092
Kafkaクラスターアカウント
Kafkaクラスターへのログインに使用されるユーザー名。 Kafkaクラスターで認証が有効になっていない場合は、ユーザー名を入力する必要はありません。
Kafkaクラスターパスワード
ユーザー名に対応するパスワード。 Kafkaクラスターで認証が有効になっていない場合は、パスワードを入力する必要はありません。
トピック
[トピックリストの取得] をクリックし、ドロップダウンリストからトピック名を選択します。
Kafkaバージョン
自己管理Kafkaクラスターのバージョン。
Kafkaクラスター暗号化
ビジネスとセキュリティの要件に基づいて、[非暗号化] または [SCRAM-SHA 256] を選択します。
ターゲットデータベースを設定します。
パラメーター
説明
インスタンスタイプ
RDS インスタンスを選択します。
インスタンスリージョン
ターゲットApsaraDB RDS for MySQLインスタンスが存在するリージョン。
データベースアカウント
ターゲットApsaraDB RDS for MySQLインスタンスのデータベースアカウント。 アカウントには、ターゲットデータベースに対する読み取りおよび書き込み権限が必要です。 データベースアカウントを作成および権限付与する方法の詳細については、 アカウントの作成と アカウントの権限を変更します。
データベースパスワード
データベースアカウントのパスワードを設定します。
重要ソースデータベースに関する情報を指定した後、[データベースパスワード] の横にある [接続のテスト] をクリックして、情報が有効かどうかを確認できます。 情報が有効な場合は、[合格] メッセージが表示されます。 [失敗] メッセージが表示されたら、[失敗] の横にある [チェック] をクリックします。 次に、チェック結果に基づいて情報を変更します。
暗号化
ニーズに応じて、[非暗号化] または [SSL暗号化] を選択します。 SSL暗号化を選択した場合、データ移行タスクを設定する前に、ApsaraDB RDSインスタンスのSSL暗号化を有効にする必要があります。 詳細については、次をご参照ください: クラウド証明書を使用してSSL暗号化を有効にします。
重要Encryptionパラメーターは、中国本土および中国 (香港) リージョンのリージョンでのみ使用できます。
ページの右下隅にある [ホワイトリストと次への設定] をクリックします。
警告DTSサーバーのCIDRブロックがデータベースまたはインスタンスのホワイトリスト、またはECSセキュリティグループルールに自動的または手動で追加されると、セキュリティリスクが発生する可能性があります。 したがって、DTSを使用してデータを移行する前に、潜在的なリスクを理解して認識し、次の対策を含む予防策を講じる必要があります。VPNゲートウェイ、またはSmart Access Gateway。
移行する移行タイプとオブジェクトを選択します。
設定
説明
移行タイプの選択
フルデータ移行のみを実行する場合は、[スキーマ移行] および [フルデータ移行] を選択します。
データ移行中にサービスの継続性を確保するには、[スキーマ移行] 、[フルデータ移行] 、および [増分データ移行] を選択します。 この例では、3つの移行タイプのすべてが選択されています。
移行するオブジェクトを選択します。
[使用可能] セクションから1つ以上のオブジェクトを選択し、アイコンをクリックして、オブジェクトを [選択済み] セクションに追加します。
説明移行するオブジェクトとして、列、テーブル、またはデータベースを選択できます。 移行するオブジェクトとしてテーブルまたは列を選択した場合、DTSは、ビュー、トリガー、ストアドプロシージャなどの他のオブジェクトを移行先データベースに移行しません。
既定では、オブジェクトがターゲットデータベースに移行された後、オブジェクトの名前は変更されません。 オブジェクト名マッピング機能を使用して、移行先データベースに移行するオブジェクトの名前を変更できます。 詳細は、オブジェクト名のマッピングをご参照ください。
オブジェクト名マッピング機能を使用してオブジェクトの名前を変更すると、そのオブジェクトに依存する他のオブジェクトの移行に失敗する可能性があります。
オブジェクトの名前を変更するかどうかを指定する
オブジェクト名マッピング機能を使用して、ApsaraDB RDSインスタンスに移行されるオブジェクトの名前を変更できます。 詳細は、オブジェクト名のマッピングをご参照ください。
ソースデータベースまたはターゲットデータベースへの接続が失敗した場合のリトライ時間範囲の指定
デフォルトでは、DTSがソースデータベースまたはターゲットデータベースへの接続に失敗した場合、DTSは次の12時間以内に再試行します。 業務要件に基づいて再試行時間範囲を指定できます。 指定された時間範囲内にDTSがソースデータベースとターゲットデータベースに再接続された場合、DTSはデータ移行タスクを再開します。 それ以外の場合、データ移行タスクは失敗します。
説明DTSが接続を再試行すると、DTSインスタンスに対して課金されます。 ビジネスニーズに基づいて再試行時間を指定することを推奨します。 ソースインスタンスとターゲットインスタンスがリリースされた後、できるだけ早くDTSインスタンスをリリースすることもできます。
ページの右下隅にある [事前チェック] をクリックします。
説明データ移行タスクを開始する前に、DTSは事前チェックを実行します。 データ移行タスクは、タスクが事前チェックに合格した後にのみ開始できます。
タスクが事前チェックに合格しなかった場合は、失敗した各項目の横にあるアイコンをクリックして詳細を表示できます。
原因に基づいて問題をトラブルシューティングし、事前チェックを再度実行できます。
問題をトラブルシューティングする必要がない場合は、失敗した項目を無視して、再度事前チェックを実行できます。
タスクが事前チェックに合格したら、[次へ] をクリックします。
[設定の確認] ダイアログボックスで、[チャネル仕様] パラメーターを指定し、[データ送信サービス (従量課金) サービス規約] を選択します。
[購入と開始] をクリックして、データ移行タスクを開始します。
スキーマ移行とフルデータ移行
フルデータ移行中は、手動でタスクを停止しないことをお勧めします。 そうしないと、ターゲットデータベースに移行されたデータが不完全になる可能性があります。 データ移行タスクが自動的に停止するまで待つことができます。
スキーマ移行、完全データ移行、および増分データ移行
増分データ移行タスクは自動的に停止しません。 タスクを手動で停止する必要があります。
重要データ移行タスクを手動で停止する適切な時期を選択することを推奨します。 たとえば、オフピーク時やワークロードを移行先クラスターに切り替える前にタスクを停止できます。
増分データ移行と移行タスクが遅延しませんが移行タスクのプログレスバーに表示されるまで待ちます。 その後、ソースデータベースへのデータの書き込みを数分間停止します。 増分データ移行のレイテンシは、プログレスバーに表示され得る。
増分データ移行のステータスが [移行タスクは遅延なし] に変わるまで待ちます。 次に、移行タスクを手動で停止します。