クラウドストレージに保存
このドキュメントでは、 TiDB Cloudからクラウドstorageにデータをストリーミングするための変更フィードを作成する方法について説明します。現在、Amazon S3 と GCS がサポートされています。
注記:
- クラウドstorageにデータをストリーミングするには、TiDBクラスタのバージョンがv7.1.1以降であることを確認してください。TiDB TiDB Cloud Dedicatedクラスタをv7.1.1以降にアップグレードするには、 TiDB Cloudサポートにお問い合わせください .
- クラスターTiDB CloudスターターおよびTiDB Cloudエッセンシャルでは、changefeed 機能は使用できません。
制限
- TiDB Cloudクラスターごとに、最大 100 個の変更フィードを作成できます。
- TiDB Cloud は、変更フィードを確立するために TiCDC を使用するため、同じTiCDCとしての制限持ちます。
- レプリケートするテーブルに主キーまたは NULL 以外の一意のインデックスがない場合、レプリケーション中に一意の制約がないと、再試行シナリオによっては下流に重複したデータが挿入される可能性があります。
ステップ1. 宛先を設定する
対象のTiDBクラスターのクラスター概要ページに移動します。左側のナビゲーションペインで「データ」 > 「Changefeed」をクリックし、 「Changefeedの作成」をクリックして、保存先としてAmazon S3またはGCSを選択します。設定手順は、選択した保存先によって異なります。
Amazon S3の場合、 S3エンドポイント領域にS3 URI
、 Access Key ID
、 Secret Access Key
入力します。S3バケットをTiDBクラスターと同じリージョンに作成します。
GCSの場合、 GCS エンドポイントを入力する前に、まず GCS バケットへのアクセスを許可する必要があります。以下の手順に従ってください。
TiDB Cloudコンソールで、サービス アカウント IDを記録します。この ID は、 TiDB Cloudに GCS バケットへのアクセスを許可するために使用されます。
Google Cloud コンソールで、GCS バケットのIAMロールを作成します。
Google Cloud コンソールにサインインします。
役割ページに移動し、 [ロールの作成]をクリックします。
ロールの名前、説明、ID、およびロール開始ステージを入力します。ロールの作成後は、ロール名を変更できません。
「権限の追加」をクリックします。次の権限をロールに追加し、 「追加」をクリックします。
- storage.buckets.get
- storage.オブジェクト.作成
- storage.オブジェクト.削除
- storage.objects.get
- storage.objects.list
- storage.objects.update
バケツページ目に進み、 TiDB Cloudアクセスさせたい GCS バケットを選択します。GCS バケットは TiDB クラスタと同じリージョンにある必要があります。
バケットの詳細ページで、 「権限」タブをクリックし、 「アクセス権の付与」をクリックします。
バケットへのアクセスを許可するには次の情報を入力し、 「保存」をクリックします。
[新しいプリンシパル]フィールドに、前に記録したターゲット TiDB クラスターのサービス アカウント ID を貼り付けます。
[ロールの選択]ドロップダウン リストに、作成したIAMロールの名前を入力し、フィルター結果から名前を選択します。
注記:
TiDB Cloudへのアクセスを削除するには、許可したアクセスを削除するだけです。
バケットの詳細ページで、オブジェクトタブをクリックします。
バケットの gsutil URI を取得するには、コピーボタンをクリックし、先頭に
gs://
追加します。例えば、バケット名がtest-sink-gcs
場合、URI はgs://test-sink-gcs/
になります。フォルダのgsutil URIを取得するには、フォルダを開き、コピーボタンをクリックし、プレフィックスとして
gs://
追加します。例えば、バケット名がtest-sink-gcs
フォルダ名がchangefeed-xxx
場合、URIはgs://test-sink-gcs/changefeed-xxx/
なります。
TiDB Cloudコンソールで、Changefeed の[宛先の構成]ページに移動し、バケットの gsutil URIフィールドに入力します。
「次へ」をクリックすると、 TiDB Cloud Dedicated クラスターから Amazon S3 または GCS への接続が確立されます。TiDB TiDB Cloud は自動的に接続の成功をテストし、検証します。
- はいの場合は、構成の次の手順に進みます。
- そうでない場合は接続エラーが表示されるので、エラーに対処する必要があります。エラーが解決したら、 「次へ」をクリックして接続を再試行してください。
ステップ2. レプリケーションを構成する
テーブルフィルターをカスタマイズして、複製するテーブルをフィルタリングします。ルールの構文については、 テーブルフィルタルールを参照してください。
- フィルタールール: この列でフィルタールールを設定できます。デフォルトでは、すべてのテーブルを複製するルール
*.*
が設定されています。新しいルールを追加すると、 TiDB CloudはTiDB内のすべてのテーブルをクエリし、ルールに一致するテーブルのみを右側のボックスに表示されます。フィルタールールは最大100件まで追加できます。 - 有効なキーを持つテーブル: この列には、主キーや一意のインデックスなど、有効なキーを持つテーブルが表示されます。
- 有効なキーのないテーブル: この列には、主キーまたは一意キーを持たないテーブルが表示されます。これらのテーブルは、一意の識別子がないと、下流で重複イベントを処理する際にデータの不整合が発生する可能性があるため、レプリケーション中に問題が発生します。データの整合性を確保するには、レプリケーションを開始する前に、これらのテーブルに一意のキーまたは主キーを追加することをお勧めします。または、フィルタールールを使用してこれらのテーブルを除外することもできます。例えば、ルール
"!test.tbl1"
を使用してテーブルtest.tbl1
除外できます。
- フィルタールール: この列でフィルタールールを設定できます。デフォルトでは、すべてのテーブルを複製するルール
イベント フィルターをカスタマイズして、複製するイベントをフィルターします。
- 一致するテーブル: この列では、イベントフィルターを適用するテーブルを設定できます。ルールの構文は、前述の「テーブルフィルター」領域で使用した構文と同じです。変更フィードごとに最大10個のイベントフィルタールールを追加できます。
- イベント フィルター: 次のイベント フィルターを使用して、変更フィードから特定のイベントを除外できます。
- イベントを無視: 指定されたイベント タイプを除外します。
- SQLを無視: 指定した式に一致するDDLイベントを除外します。例えば、
^drop
指定するとDROP
で始まる文が除外され、add column
指定するとADD COLUMN
含む文が除外されます。 - 挿入値式を無視: 特定の条件を満たす
INSERT
文を除外します。例えば、id >= 100
指定すると、id
が100以上のINSERT
文が除外されます。 - 新しい値の更新式を無視: 新しい値が指定条件に一致する
UPDATE
文を除外します。例えば、gender = 'male'
指定すると、gender
がmale
になる更新は除外されます。 - 古い値の更新式を無視: 古い値が指定条件に一致する
UPDATE
ステートメントを除外します。例えば、age < 18
指定すると、古い値age
が18より小さい更新が除外されます。 - 削除値式を無視: 指定された条件を満たす
DELETE
文を除外します。例えば、name = 'john'
指定すると、name
が'john'
なるDELETE
文が除外されます。
[レプリケーションの開始位置]領域で、次のいずれかのレプリケーション位置を選択します。
- 今からレプリケーションを開始します
- 特定のTSOからレプリケーションを開始する
- 特定の時間からレプリケーションを開始する
データ形式領域で、 CSVまたはCanal-JSON形式のいずれかを選択します。
CSV形式を設定するには、次のフィールドに入力します。
- バイナリエンコード方式: バイナリデータのエンコード方式。base64(デフォルト)またはhex**を選択できます。AWS DMS と統合する場合はhex を**使用してください。
- 日付区切り: 年、月、日に基づいてデータを回転するか、まったく回転しないことを選択します。
- 区切り文字: CSVファイル内の値を区切る文字を指定します。最も一般的に使用される区切り文字はカンマ(
,
)です。 - 引用符: 区切り文字または特殊文字を含む値を囲む文字を指定します。通常、引用符には二重引用符 (
"
) が使用されます。 - Null/空値:CSVファイル内でNull値または空値をどのように表現するかを指定します。これは、データを適切に処理および解釈するために重要です。
- コミット T を含める: CSV 行に
commit-ts
含めるかどうかを制御します。
Canal-JSONはプレーンなJSONテキスト形式です。設定するには、以下のフィールドに入力してください。
- 日付区切り: 年、月、日に基づいてデータを回転するか、まったく回転しないことを選択します。
- TiDB 拡張機能を有効にする: このオプションを有効にすると、TiCDC はウォーターマークイベント送信し、 TiDB拡張フィールド Canal-JSON メッセージに追加します。
フラッシュ パラメータ領域では、次の 2 つの項目を設定できます。
- フラッシュ間隔: デフォルトでは 60 秒に設定されていますが、2 秒から 10 分の範囲で調整可能です。
- ファイル サイズ: デフォルトでは 64 MB に設定されていますが、1 MB ~ 512 MB の範囲で調整可能です。
注記:
これら2つのパラメータは、クラウドstorageに生成される各データベーステーブルごとのオブジェクト数に影響します。テーブル数が多い場合、同じ設定を使用すると生成されるオブジェクト数が増加し、クラウドstorageAPIの呼び出しコストが増加します。したがって、RPO(Recovery Point Objective:復旧時点目標)とコスト要件に基づいて、これらのパラメータを適切に設定することをお勧めします。
ステップ3. 仕様を構成する
次へをクリックして、変更フィード仕様を構成します。
- 「Changefeed 仕様」領域で、Changefeed で使用されるレプリケーション容量単位 (RCU) の数を指定します。
- 「Changefeed 名」領域で、Changefeed の名前を指定します。
ステップ4. 構成を確認してレプリケーションを開始する
「次へ」をクリックして、変更フィード構成を確認します。
- すべての構成が正しいことを確認したら、 [作成]をクリックして、変更フィードの作成を続行します。
- 設定を変更する必要がある場合は、 「前へ」をクリックして戻って必要な変更を加えます。
シンクはすぐに起動し、シンクのステータスが「作成中」から「実行中」に変わることがわかります。
変更フィードの名前をクリックすると、詳細ページに移動します。このページでは、チェックポイントのステータス、レプリケーションのレイテンシー、その他の関連メトリックなど、変更フィードに関する詳細情報を確認できます。