MySQLに沈む
このドキュメントでは、 Sink to MySQL変更フィードを使用してTiDB Cloudから MySQL にデータをストリーミングする方法について説明します。
注記:
- changefeed 機能を使用するには、 TiDB Cloud Dedicated クラスターのバージョンが v6.1.3 以降であることを確認してください。
- TiDB Cloudサーバーレス クラスター場合、changefeed 機能は使用できません。
制限
- TiDB Cloudクラスターごとに、最大 100 個の変更フィードを作成できます。
- TiDB Cloud は変更フィードを確立するために TiCDC を使用するため、同じTiCDCとしての制限持ちます。
- 複製するテーブルに主キーまたは null 以外の一意のインデックスがない場合、複製中に一意の制約がないと、再試行シナリオによっては下流に重複したデータが挿入される可能性があります。
前提条件
変更フィードを作成する前に、次の前提条件を完了する必要があります。
- ネットワーク接続を設定する
- 既存のデータをエクスポートして MySQL にロードする (オプション)
- 既存のデータをロードせず、増分データのみをMySQLに複製する場合は、MySQLに対応するターゲットテーブルを作成します。
ネットワーク
TiDB クラスタ がMySQL サービスに接続できることを確認します。
MySQL サービスがパブリックインターネットアクセスのない AWS VPC 内にある場合は、次の手順を実行します。
MySQL サービスの VPC と TiDB クラスター間の接続はVPCピアリング接続を設定する 。
MySQL サービスが関連付けられているセキュリティ グループの受信ルールを変更します。
受信ルールにTiDB Cloudクラスターが配置されているリージョンの CIDR追加する必要があります。これにより、トラフィックが TiDBクラスタから MySQL インスタンスに流れるようになります。
MySQL URL にホスト名が含まれている場合は、 TiDB Cloud がMySQL サービスの DNS ホスト名を解決できるようにする必要があります。
- VPC ピアリング接続の DNS 解決を有効にするの手順に従います。
- Accepter DNS 解決オプションを有効にします。
MySQL サービスがパブリック インターネット アクセスのない Google Cloud VPC 内にある場合は、次の手順に従います。
MySQL サービスが Google Cloud SQL である場合は、Google Cloud SQL インスタンスに関連付けられた VPC で MySQL エンドポイントを公開する必要があります。Google によって開発されたCloud SQL 認証プロキシを使用する必要がある場合があります。
MySQL サービスの VPC と TiDB クラスター間の接続はVPCピアリング接続を設定する 。
MySQL が配置されている VPC の Ingress ファイアウォール ルールを変更します。
入力ファイアウォール ルールにTiDB Cloudクラスターが配置されているリージョンの CIDR追加する必要があります。これにより、トラフィックが TiDBクラスタから MySQL エンドポイントに流れるようになります。
既存のデータを読み込む(オプション)
Sink to MySQLコネクタは、特定のタイムスタンプ以降に TiDB クラスターから MySQL に増分データをシンクすることしかできません。TiDB クラスターに既にデータがある場合は、 Sink to MySQL を有効にする前に、TiDB クラスターの既存のデータをエクスポートして MySQL にロードできます。
既存のデータをロードするには:
その間、履歴データが TiDB によってガベージ コレクションされないように、 tidbgcライフタイムを次の 2 つの操作の合計時間よりも長く延長します。
- 既存のデータをエクスポートおよびインポートする時間
- Sink to MySQLを作成する時間
例えば:
SET GLOBAL tidb_gc_life_time = '720h';Dumpling使用して TiDB クラスターからデータをエクスポートし、 マイダンパー/マイローダーなどのコミュニティ ツールを使用してデータを MySQL サービスにロードします。
Dumplingのエクスポートファイルから、メタデータ ファイルから MySQL シンクの開始位置を取得します。
以下はメタデータ ファイルの例の一部です
SHOW MASTER STATUS
のうちPos
既存データの TSO であり、MySQL シンクの開始位置でもあります。Started dump at: 2020-11-10 10:40:19 SHOW MASTER STATUS: Log: tidb-binlog Pos: 420747102018863124 Finished dump at: 2020-11-10 10:40:20
MySQLでターゲットテーブルを作成する
既存のデータをロードしない場合は、TiDB からの増分データを保存するために、MySQL に対応するターゲット テーブルを手動で作成する必要があります。そうしないと、データは複製されません。
MySQLシンクを作成する
前提条件を完了したら、データを MySQL にシンクできます。
ターゲット TiDB クラスターのクラスター概要ページに移動し、左側のナビゲーション ペインで[Changefeed] をクリックします。
「Changefeed の作成」をクリックし、ターゲット タイプとしてMySQL を選択します。
MySQL 接続に MySQL エンドポイント、ユーザー名、およびパスワードを入力します。
「次へ」をクリックして、TiDB が MySQL に正常に接続できるかどうかをテストします。
- はいの場合は、構成の次の手順に進みます。
- そうでない場合は、接続エラーが表示されるので、エラーを処理する必要があります。エラーが解決したら、もう一度[次へ]をクリックします。
テーブル フィルターをカスタマイズして、複製するテーブルをフィルターします。ルール構文については、 テーブルフィルタルールを参照してください。
- フィルター ルール: この列でフィルター ルールを設定できます。デフォルトでは、すべてのテーブルを複製するルール
*.*
があります。新しいルールを追加すると、 TiDB Cloud はTiDB 内のすべてのテーブルを照会し、右側のボックスにルールに一致するテーブルのみを表示します。最大 100 個のフィルター ルールを追加できます。 - 有効なキーを持つテーブル: この列には、主キーや一意のインデックスなど、有効なキーを持つテーブルが表示されます。
- 有効なキーのないテーブル: この列には、主キーまたは一意のキーがないテーブルが表示されます。これらのテーブルは、一意の識別子がないと、ダウンストリームが重複イベントを処理するときにデータの一貫性がなくなる可能性があるため、レプリケーション中に問題が発生します。データの一貫性を確保するには、レプリケーションを開始する前に、これらのテーブルに一意のキーまたは主キーを追加することをお勧めします。または、フィルター ルールを追加して、これらのテーブルを除外することもできます。たとえば、ルール
"!test.tbl1"
使用してテーブルtest.tbl1
を除外できます。
- フィルター ルール: この列でフィルター ルールを設定できます。デフォルトでは、すべてのテーブルを複製するルール
イベント フィルターをカスタマイズして、複製するイベントをフィルターします。
- 一致するテーブル: この列で、イベント フィルターを適用するテーブルを設定できます。ルールの構文は、前のテーブル フィルター領域で使用した構文と同じです。変更フィードごとに最大 10 個のイベント フィルター ルールを追加できます。
- 無視されるイベント: イベント フィルターが変更フィードから除外するイベントの種類を設定できます。
「レプリケーションの開始位置」で、MySQL シンクの開始位置を設定します。
- Dumpling を既存のデータをロードしましたしている場合は、 「特定の TSO からレプリケーションを開始」を選択し、 Dumplingエクスポートされたメタデータ ファイルから取得した TSO を入力します。
- アップストリーム TiDB クラスターにデータがない場合は、 「今すぐレプリケーションを開始する」を選択します。
- それ以外の場合は、 「特定の時間からレプリケーションを開始する」を選択して開始時点をカスタマイズできます。
次へをクリックして、変更フィード仕様を構成します。
- 「Changefeed 仕様」領域で、Changefeed で使用されるレプリケーション容量単位 (RCU) の数を指定します。
- 「Changefeed 名」領域で、Changefeed の名前を指定します。
「次へ」をクリックして、変更フィード構成を確認します。
すべての構成が正しいことを確認したら、リージョン間レプリケーションのコンプライアンスを確認し、 「作成」をクリックします。
いくつかの設定を変更する場合は、 「前へ」をクリックして前の設定ページに戻ります。
シンクはすぐに起動し、シンクのステータスが「作成中」から「実行中」に変わるのがわかります。
変更フィード名をクリックすると、チェックポイント、レプリケーションのレイテンシー、その他のメトリックなど、変更フィードに関する詳細が表示されます。
Dumpling を使用して既存のデータをロードしました持っている場合は、シンクの作成後に GC 時間を元の値 (デフォルト値は
10m
) に戻す必要があります。
SET GLOBAL tidb_gc_life_time = '10m';