TiDB Cloudにシンクする
このドキュメントでは、TiDB Cloud DedicatedクラスターからTiDB Cloud StarterまたはTiDB Cloud Essentialインスタンスにデータをストリーミングする方法について説明します。
注記:
Changefeed機能を使用するには、 TiDB Cloud Dedicatedクラスタのバージョンがv6.1.3以降であることを確認してください。
制限
TiDB Cloudの各クラスターにつき、最大100個のチェンジフィードを作成できます。
TiDB Cloud はTiCDC を使用して変更フィードを確立するため、同じTiCDCの制限があります。
複製対象のテーブルに主キーまたはNULLを許容しない一意インデックスがない場合、複製中に一意制約が存在しないことで、一部の再試行シナリオにおいて、下流で重複データが挿入される可能性があります。
TiDB Cloudへのシンク機能は、以下のAWSリージョンにあり、2022年11月9日以降に作成されたTiDB Cloud Dedicatedクラスターでのみ利用可能です。
- AWSオレゴン(米国西部2)
- AWS フランクフルト (eu-central-1)
- AWSシンガポール (ap-southeast-1)
- AWS東京 (ap-northeast-1)
ソースとなるTiDB Cloud Dedicatedクラスターと、宛先となるTiDB Cloud StarterまたはTiDB Cloud Essentialインスタンスは、同じプロジェクトおよび同じリージョンに属している必要があります。
TiDB Cloudへのシンク機能は、プライベートエンドポイント経由のネットワーク接続のみをサポートしています。TiDB Cloud DedicatedクラスタからTiDB Cloud StarterまたはTiDB Cloud Essentialインスタンスにデータをストリーミングするためのチェンジフィードを作成すると、 TiDB Cloudは2つのクラスタ間のプライベートエンドポイント接続を自動的に設定します。
前提条件
TiDB Cloudへのシンクコネクタは、特定のTSOの後、 TiDB Cloud DedicatedクラスタからTiDB Cloud StarterまたはTiDB Cloud Essentialインスタンスに増分データをシンクすることのみが可能です。
変更フィードを作成する前に、ソースのTiDB Cloud Dedicatedクラスターから既存のデータをエクスポートし、そのデータを宛先のTiDB Cloud StarterまたはTiDB Cloud Essentialインスタンスにロードする必要があります。
tidb_gc_life_time以下の 2 つの操作の合計時間よりも長く設定することで、その期間中の履歴データが TiDB によってガベージ コレクションされないようにします。
- 既存データのエクスポートとインポートにかかる時間
- Sink to TiDB Cloudを作成する時間
例えば:
SET GLOBAL tidb_gc_life_time = '720h';Dumplingを使用してTiDB Cloud Dedicatedクラスターからデータをエクスポートし、 インポート機能を使用して宛先のTiDB Cloud StarterまたはTiDB Cloud Essentialインスタンスにデータをロードします。
Dumplingのエクスポートファイルのメタデータ ファイルからTiDB Cloudシンクの開始位置を取得します。
以下はメタデータファイルの例の一部です。
PosのSHOW MASTER STATUSは、既存データの TSO であり、 TiDB Cloudシンクの開始位置でもあります。Started dump at: 2023-03-28 10:40:19 SHOW MASTER STATUS: Log: tidb-binlog Pos: 420747102018863124 Finished dump at: 2023-03-28 10:40:20
TiDB Cloudシンクを作成する
前提条件を満たしたら、データを宛先のTiDB Cloud StarterまたはTiDB Cloud Essentialインスタンスにシンクできます。
対象のTiDBクラスタのクラスタ概要ページに移動し、左側のナビゲーションペインで「データ」 > 「変更フィード」をクリックします。
「変更フィードを作成」をクリックし、宛先として「TiDB Cloud」を選択します。
TiDB Cloud接続エリアで、接続先のTiDB Cloud StarterまたはTiDB Cloud Essentialインスタンスを選択し、接続先のインスタンスのユーザー名とパスワードを入力します。
「次へ」をクリックして、2つのTiDBクラスター間の接続を確立し、changefeedがそれらを正常に接続できるかどうかをテストします。
- はいの場合、次の設定手順に進みます。
- そうでない場合は、接続エラーが表示されますので、エラーを処理してください。エラーが解決したら、もう一度「次へ」をクリックしてください。
テーブル フィルターをカスタマイズして、複製するテーブルをフィルターします。ルールの構文については、テーブルフィルタルールを参照してください。
- 大文字小文字の区別:フィルタルールにおけるデータベース名とテーブル名の照合において、大文字小文字を区別するかどうかを設定できます。デフォルトでは、大文字小文字は区別されません。
- フィルタルール:この列でフィルタルールを設定できます。デフォルトでは、すべてのテーブルを複製するルール
*.*が設定されています。新しいルールを追加すると、 TiDB Cloud はTiDB 内のすべてのテーブルをクエリし、右側のボックスにルールに一致するテーブルのみを表示します。フィルタルールは最大 100 個まで追加できます。 - 有効なキーを持つテーブル:この列には、主キーや一意インデックスなど、有効なキーを持つテーブルが表示されます。
- 有効なキーのないテーブル: この列には、主キーまたは一意キーがないテーブルが表示されます。一意の識別子がないと、ダウンストリームが重複イベントを処理する際にデータの一貫性が失われる可能性があるため、これらのテーブルはレプリケーション中に問題となります。データの一貫性を確保するには、レプリケーションを開始する前に、これらのテーブルに一意キーまたは主キーを追加することをお勧めします。または、フィルタルールを追加してこれらのテーブルを除外することもできます。たとえば、ルール
test.tbl1を使用して、テーブル"!test.tbl1"除外できます。
イベントフィルターをカスタマイズして、複製したいイベントを絞り込みます。
- 一致するテーブル:この列では、イベントフィルターを適用するテーブルを設定できます。ルールの構文は、前のテーブルフィルター領域で使用されているものと同じです。変更フィードごとに最大10個のイベントフィルタールールを追加できます。
- イベントフィルター:以下のイベントフィルターを使用して、変更フィードから特定のイベントを除外できます。
- イベントを無視する:指定されたイベントタイプを除外します。
- SQL を無視: 指定された式に一致する DDL イベントを除外します。たとえば、
^dropDROPで始まるステートメントを除外し、add columnはADD COLUMNを含むステートメントを除外します。 - 挿入値の式を無視する: 特定の条件を満たす
INSERTステートメントを除外します。たとえば、id >= 100は、INSERTが 100 以上であるidステートメントを除外します。 - 新しい値の更新式を無視する: 新しい値が指定された条件に一致する
UPDATEステートメントを除外します。たとえば、gender = 'male'はgenderがmaleになるような更新を除外します。 - 古い値の更新を無視する式: 古い値が指定された条件に一致する
UPDATEステートメントを除外します。たとえば、age < 18ageの古い値が 18 未満である場合の更新を除外します。 - 削除値式を無視する: 指定された条件を満たす
DELETEステートメントを除外します。たとえば、name = 'john'はDELETEがnameである'john'ステートメントを除外します。
「レプリケーション開始位置」領域に、Dumplingでエクスポートしたメタデータファイルから取得したTSOを入力します。
「次へ」をクリックして、変更フィードの仕様を設定してください。
- 変更フィード仕様領域で、変更フィードで使用するレプリケーション容量ユニット(RCU)の数を指定します。
- 変更フィード名欄に、変更フィードの名前を指定します。
「次へ」をクリックして、変更フィードの設定を確認してください。
すべての構成が正しいことを確認したら、リージョン間レプリケーションの準拠性をチェックし、 [作成]をクリックします。
設定を変更したい場合は、 「前へ」をクリックして前の設定ページに戻ってください。
シンクはまもなく開始され、シンクのステータスが「作成中」から「実行中」に変わるのが確認できます。
変更フィード名をクリックすると、チェックポイント、レプリケーションレイテンシー、その他のメトリックなど、変更フィードに関する詳細情報が表示されます。
シンクが作成された後、 tidb_gc_life_time元の値(デフォルト値は
10m)に戻します。SET GLOBAL tidb_gc_life_time = '10m';