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サービスに接続できることを確認してください。接続方法は以下のいずれかを選択できます。
- プライベートリンク接続:セキュリティコンプライアンスを満たし、ネットワーク品質を確保します。
- 公共ネットワーク:迅速なセットアップに適しています。
プライベートリンク接続は、クラウドプロバイダーのPrivate Link技術を活用することで、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インスタンスの概要ページに移動し、左側のナビゲーションペインでデータ > 変更フィードをクリックします。
Create Changefeedをクリックし、宛先としてMySQLを選択します。
Connectivity Methodで、MySQLサービスへの接続方法を選択してください。
- 公開を選択した場合は、MySQLエンドポイントを入力してください。
- Private Linkを選択した場合は、ネットワークセクションで作成したプライベートリンク接続を選択し、MySQLサービスのMySQLポートを入力してください。
認証画面で、MySQLユーザー名とパスワードを入力し、MySQLサービスのTLS暗号化を設定してください。現在、 TiDB CloudはMySQL TLS接続における自己署名証明書をサポートしていません。
次へをクリックして、TiDBがMySQLに正常に接続できるかどうかをテストしてください。
- はいの場合、次の設定手順に進みます。
- そうでない場合は、接続エラーが表示されますので、エラーを処理してください。エラーが解決したら、もう一度次へをクリックしてください。
Table Filterカスタマイズして、複製するテーブルをフィルターします。ルールの構文については、 テーブルフィルタルールを参照してください。
- Replication Scope:有効なキーを持つテーブルのみをレプリケートするか、選択したすべてのテーブルをレプリケートするかを選択できます。
- Filter Rules:この列でフィルタルールを設定できます。デフォルトでは、すべてのテーブルを複製するルール
*.*が設定されています。新しいルールを追加して[適用] をクリックすると、 TiDB Cloud はTiDB 内のすべてのテーブルをクエリし、Filter resultsの下にルールに一致するテーブルのみを表示します。 - Case Sensitive:フィルタルールにおけるデータベース名とテーブル名の照合において、大文字小文字を区別するかどうかを設定できます。デフォルトでは、大文字小文字は区別されません。
- 有効なキーで結果をフィルタリングする:この列には、主キーや一意インデックスなど、有効なキーを持つテーブルが表示されます。
- 有効なキーのない結果をフィルタリングする: この列には、主キーまたは一意キーがないテーブルが表示されます。一意の識別子がないと、ダウンストリームが重複イベントを処理する際にデータの一貫性が失われる可能性があるため、これらのテーブルはレプリケーション中に問題となります。データの一貫性を確保するには、レプリケーションを開始する前に、これらのテーブルに一意キーまたは主キーを追加することをお勧めします。または、フィルタ ルールを追加してこれらのテーブルを除外することもできます。たとえば、ルール
test.tbl1を使用して、テーブル"!test.tbl1"を除外できます。
Event Filterをカスタマイズして、複製したいイベントを絞り込みます。
- Tables matching:この列では、イベントフィルターを適用するテーブルを設定できます。ルールの構文は、前のTable Filter領域で使用されているものと同じです。
- Event Filter:無視したいイベントを選択できます。
Start Replication Positionで、MySQLシンクの開始位置を設定します。
- エクスポートを使用して既存のデータをロードしましたがある場合は、 From Timeを選択し、エクスポートによって返されたスナップショット時刻を入力します。タイムゾーンが正しいことを確認してください。
- 上流のTiDB Cloud Essentialインスタンスにデータがない場合は、 今すぐレプリケーションを開始するを選択してください。
次へをクリックして変更フィードを設定してください。
Changefeed Name欄に、変更フィードの名前を指定します。
設定内容を確認してください。すべての設定が正しければ、 送信をクリックしてください。
設定を変更したい場合は、 前へをクリックして前の設定ページに戻ってください。
作成後、シンクの状態は作成中から実行中に変わります。
変更フィード名をクリックすると、チェックポイント、レプリケーションレイテンシー、その他のメトリックなど、変更フィードに関する詳細情報が表示されます。
既存のデータをロードしましたて GC 時間を増やした場合は、シンクの作成後に元の値 (デフォルト値は
10m) に戻します。SET GLOBAL tidb_gc_life_time = '10m';