MySQLへのシンク(ベータ版)
このドキュメントでは、Sink to MySQL changefeedを使用してTiDB Cloud EssentialからMySQLにデータをストリーミングする方法について説明します。
制限
- TiDB Cloud Essentialインスタンスごとに、最大10個のチェンジフィードを作成できます。
- TiDB Cloud Essential はTiCDC を使用して変更フィードを確立するため、同じTiCDCの制限があります。
- 複製対象のテーブルに主キーまたはNULLを許容しない一意インデックスがない場合、複製中に一意制約が存在しないことで、一部の再試行シナリオにおいて、下流で重複データが挿入される可能性があります。
前提条件
変更フィードを作成する前に、以下の前提条件を満たす必要があります。
- ネットワーク接続を設定する
- 既存データをエクスポートしてMySQLにロードする(オプション)
- 既存のデータをロードせず、増分データのみをMySQLに複製する場合は、MySQLに対応するターゲットテーブルを作成してください。
ネットワーク
TiDB Cloud EssentialインスタンスがMySQLサービスに接続できることを確認してください。接続方法は以下のいずれかを選択できます。
- プライベートリンク接続:セキュリティコンプライアンスを満たし、ネットワーク品質を確保します。
- 公共ネットワーク:迅速なセットアップに適しています。
プライベートリンク接続は、クラウドプロバイダーのプライベートリンク技術を活用することで、VPC内のリソースがプライベートIPアドレスを介して他のVPC内のサービスに接続できるようにします。これにより、あたかもそれらのサービスがVPC内で直接ホストされているかのように動作します。
プライベート リンク接続を通じて、 TiDB Cloud Essentialインスタンスを MySQL サービスに安全に接続できます。 MySQL サービスでプライベート リンク接続が利用できない場合は、プライベートリンクプライベートリンク接続を介してAmazon RDSに接続するプライベートリンク接続を介してAlibaba Cloud ApsaraDB RDS for MySQLに接続する。
MySQLサービスがパブリックネットワーク経由でアクセスできる場合は、パブリックIPアドレスまたはドメイン名を使用してMySQLに接続することができます。
既存データの読み込み(オプション)
Sink to MySQLコネクタは、特定のタイムスタンプ以降のTiDB Cloud EssentialインスタンスからMySQLへの増分データのみをシンクできます。TiDB Cloud Essentialインスタンスに既にデータが存在する場合は、 Sink to MySQLを有効にする前に、 TiDB Cloud Essentialインスタンスの既存データをエクスポートしてMySQLにロードすることができます。
既存のデータを読み込むには:
tidb_gc_life_time以下の 2 つの操作の合計時間よりも長く設定することで、この期間中の履歴データが TiDB によってガベージ コレクションされないようにします。
- 既存データのエクスポートとインポートにかかる時間
- Sink to MySQLを作成する時間
例えば:
SET GLOBAL tidb_gc_life_time = '72h';輸出機能を使用してTiDB Cloud Essentialインスタンスからデータをエクスポートし、その後、 mydumper/myloaderなどのコミュニティツールを使用してデータをMySQLサービスにロードします。
輸出によって返されるスナップショットの時刻を記録してください。このタイムスタンプを、MySQLシンクを設定する際の開始位置として使用してください。
MySQLでターゲットテーブルを作成する
既存のデータをロードしない場合は、TiDBからの増分データを保存するために、MySQLに該当するターゲットテーブルを手動で作成する必要があります。そうしないと、データは複製されません。
MySQLシンクを作成する
前提条件を満たしたら、データをMySQLに取り込むことができます。
対象のTiDB Cloud Essentialインスタンスの概要ページに移動し、左側のナビゲーションペインで「データ」 > 「変更フィード」をクリックします。
「変更フィードの作成」をクリックし、宛先として「MySQL」を選択します。
「接続方法」で、MySQLサービスへの接続方法を選択してください。
- 「公開」を選択した場合は、MySQLエンドポイントを入力してください。
- 「プライベートリンク」を選択した場合は、ネットワークセクションで作成したプライベートリンク接続を選択し、MySQLサービスのMySQLポートを入力してください。
認証画面で、MySQLユーザー名とパスワードを入力し、MySQLサービスのTLS暗号化を設定してください。現在、 TiDB CloudはMySQL TLS接続における自己署名証明書をサポートしていません。
「次へ」をクリックして、TiDBがMySQLに正常に接続できるかどうかをテストしてください。
- はいの場合、次の設定手順に進みます。
- そうでない場合は、接続エラーが表示されますので、エラーを処理してください。エラーが解決したら、もう一度「次へ」をクリックしてください。
テーブル フィルターをカスタマイズして、複製するテーブルをフィルターします。ルールの構文については、 テーブルフィルタルールを参照してください。
- レプリケーション範囲:有効なキーを持つテーブルのみをレプリケートするか、選択したすべてのテーブルをレプリケートするかを選択できます。
- フィルタルール:この列でフィルタルールを設定できます。デフォルトでは、すべてのテーブルを複製するルール
*.*が設定されています。新しいルールを追加して[適用] をクリックすると、 TiDB Cloud はTiDB 内のすべてのテーブルをクエリし、フィルタ結果の下にルールに一致するテーブルのみを表示します。 - 大文字小文字の区別:フィルタルールにおけるデータベース名とテーブル名の照合において、大文字小文字を区別するかどうかを設定できます。デフォルトでは、大文字小文字は区別されません。
- 有効なキーで結果をフィルタリングする:この列には、主キーや一意インデックスなど、有効なキーを持つテーブルが表示されます。
- 有効なキーのない結果をフィルタリングする: この列には、主キーまたは一意キーがないテーブルが表示されます。一意の識別子がないと、ダウンストリームが重複イベントを処理する際にデータの一貫性が失われる可能性があるため、これらのテーブルはレプリケーション中に問題となります。データの一貫性を確保するには、レプリケーションを開始する前に、これらのテーブルに一意キーまたは主キーを追加することをお勧めします。または、フィルタ ルールを追加してこれらのテーブルを除外することもできます。たとえば、ルール
test.tbl1を使用して、テーブル"!test.tbl1"を除外できます。
イベントフィルターをカスタマイズして、複製したいイベントを絞り込みます。
- 一致するテーブル:この列では、イベントフィルターを適用するテーブルを設定できます。ルールの構文は、前のテーブルフィルター領域で使用されているものと同じです。
- イベントフィルター:無視したいイベントを選択できます。
「レプリケーション開始位置」で、MySQLシンクの開始位置を設定します。
- エクスポートを使用して既存のデータをロードしましたがある場合は、 [開始時刻] を選択し、エクスポートによって返されたスナップショット時刻を入力します。タイムゾーンが正しいことを確認してください。
- 上流のTiDB Cloud Essentialインスタンスにデータがない場合は、 「今すぐレプリケーションを開始する」を選択してください。
「次へ」をクリックして変更フィードを設定してください。
変更フィード名欄に、変更フィードの名前を指定します。
設定内容を確認してください。すべての設定が正しければ、 「送信」をクリックしてください。
設定を変更したい場合は、 「前へ」をクリックして前の設定ページに戻ってください。
作成後、シンクの状態は「作成中」から「実行中」に変わります。
変更フィード名をクリックすると、チェックポイント、レプリケーションレイテンシー、その他のメトリックなど、変更フィードに関する詳細情報が表示されます。
既存のデータをロードしましたて GC 時間を増やした場合は、シンクの作成後に元の値 (デフォルト値は
10m) に戻します。SET GLOBAL tidb_gc_life_time = '10m';