MySQLにシンクする
このドキュメントでは、Sink to MySQL changefeedを使用してTiDB CloudからMySQLにデータをストリーミングする方法について説明します。
注記:
変更フィード機能を使用するには、 TiDB Cloud Dedicatedクラスタのバージョンがv6.1.3以降であることを確認してください。
制限
- TiDB Cloud Dedicatedクラスターごとに、最大 100 個の変更フィードを作成できます。
- TiDB Cloud はTiCDC を使用して変更フィードを確立するため、同じTiCDCの制限があります。
- 複製対象のテーブルに主キーまたはNULLを許容しない一意インデックスがない場合、複製中に一意制約が存在しないことで、一部の再試行シナリオにおいて、下流で重複データが挿入される可能性があります。
前提条件
変更フィードを作成する前に、以下の前提条件を満たす必要があります。
- ネットワーク接続を設定する
- 既存データをエクスポートしてMySQLにロードする(オプション)
- 既存のデータをロードせず、増分データのみをMySQLに複製する場合は、MySQLに対応するターゲットテーブルを作成してください。
ネットワーク
TiDB Cloud Dedicatedクラスターが MySQL サービスに接続できることを確認してください。
MySQLサービスがパブリックインターネットアクセスを持たないAWS VPC内にある場合は、以下の手順を実行してください。
MySQL サービスの VPC とTiDB Cloud Dedicatedクラスターの間でVPCピアリング接続を設定する。
MySQLサービスが関連付けられているセキュリティグループの受信ルールを変更します。
TiDB Cloud Dedicatedクラスターが配置されているリージョンの CIDR受信ルールに追加する必要があります。これにより、 TiDB Cloud Dedicatedクラスターから MySQL インスタンスにトラフィックが流れるようになります。
MySQLのURLにホスト名が含まれている場合、 TiDB CloudがMySQLサービスのDNSホスト名を解決できるようにする必要があります。
- VPCピアリング接続のDNS解決を有効にするの手順に従います。
- アクセプターDNS解決オプションを有効にする。
MySQL サービスがパブリック インターネット アクセスのない Google Cloud VPC 内にある場合は、以下の手順を実行してください。
MySQL サービスが Google Cloud SQL の場合、Google Cloud SQL インスタンスに関連付けられた VPC に MySQL エンドポイントを公開する必要があります。Cloud Cloud SQL認証プロキシ使用する必要がある場合があります。これは Google によって開発されています。
MySQL サービスの VPC とTiDB Cloud Dedicatedクラスターの間でVPCピアリング接続を設定する。
MySQLが配置されているVPCの受信ファイアウォールルールを変更します。
TiDB Cloud Dedicatedクラスターが配置されているリージョンの CIDRイングレス ファイアウォール ルールに追加する必要があります。これにより、 TiDB Cloud Dedicatedクラスターから MySQL エンドポイントにトラフィックが流れるようになります。
プライベートエンドポイントは、クラウドプロバイダーのプライベートリンクまたはプライベートサービスコネクト技術を活用し、VPC内のリソースがプライベートIPアドレスを介して他のVPC内のサービスに接続できるようにします。これにより、あたかもそれらのサービスがVPC内で直接ホストされているかのように動作します。
プライベート エンドポイントを介して、 TiDB Cloud Dedicatedクラスターを MySQL サービスに安全に接続できます。 MySQL サービスでプライベート エンドポイントが利用できない場合は、Changefeeds用のプライベートエンドポイントを設定するに従って作成します。
既存データの読み込み(オプション)
Sink to MySQLコネクタは、特定のタイムスタンプ以降の増分データのみをTiDB Cloud DedicatedクラスタからMySQLにシンクできます。TiDB Cloud Dedicatedクラスタに既にデータが存在する場合は、 Sink to MySQLを有効にする前に、 TiDB Cloud Dedicatedクラスタの既存データをエクスポートしてMySQLにロードすることができます。
既存のデータを読み込むには:
tidb_gc_life_time以下の 2 つの操作の合計時間よりも長く設定することで、その期間中の履歴データが TiDB によってガベージ コレクションされないようにします。
- 既存データのエクスポートとインポートにかかる時間
- Sink to MySQLを作成する時間
例えば:
SET GLOBAL tidb_gc_life_time = '720h';Dumplingを使用してTiDB Cloud Dedicatedクラスターインスタンスからデータをエクスポートし、 mydumper/myloaderなどのコミュニティ ツールを使用してデータを MySQL サービスにロードします。
Dumplingのエクスポートファイルのメタデータ ファイルから MySQL シンクの開始位置を取得します。
以下はメタデータファイルの例の一部です。
PosのSHOW MASTER STATUSは、既存データの 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 Cloud Dedicatedクラスターの概要ページに移動し、左側のナビゲーション ペインで[データ] > [変更フィード]をクリックします。
「変更フィードの作成」をクリックし、宛先として「MySQL」を選択します。
「接続方法」で、MySQLサービスへの接続方法を選択してください。
- VPCピアリングまたはパブリックIPを選択した場合は、MySQLエンドポイントを入力してください。
- 「プライベートリンク」を選択した場合は、ネットワークセクションで作成したプライベートエンドポイントを選択し、MySQLサービスのMySQLポートを入力してください。
「認証」欄に、MySQLサービスのユーザー名とパスワードを入力してください。
「次へ」をクリックして、TiDBがMySQLに正常に接続できるかどうかをテストしてください。
- はいの場合、次の設定手順に進みます。
- そうでない場合は、接続エラーが表示されますので、エラーを処理してください。エラーが解決したら、もう一度「次へ」をクリックしてください。
テーブル フィルターをカスタマイズして、複製するテーブルをフィルターします。ルールの構文については、テーブルフィルタルールを参照してください。
- 大文字小文字の区別:フィルタルールにおけるデータベース名とテーブル名の照合において、大文字小文字を区別するかどうかを設定できます。デフォルトでは、大文字小文字は区別されません。
- フィルタルール:この列でフィルタルールを設定できます。デフォルトでは、すべてのテーブルを複製するルール
*.*が設定されています。新しいルールを追加すると、 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'ステートメントを除外します。
「レプリケーション開始位置」で、MySQLシンクの開始位置を設定します。
- Dumplingを使用して既存のデータをロードしましたがある場合は、 [特定の TSO からレプリケーションを開始する]を選択し、 Dumpling のエクスポートされたメタデータ ファイルから取得した TSO を入力します。
- アップストリームの TiDB にデータがない場合は、 「今すぐレプリケーションを開始する」を選択してください。
- それ以外の場合は、 「特定の時間からレプリケーションを開始する」を選択して、開始時刻をカスタマイズできます。
「次へ」をクリックして、変更フィードの仕様を設定してください。
- 「チェンジフィードの仕様」領域で、チェンジフィードで使用する複製容量単位(RCU)チェンジフィードの数を指定します。
- 変更フィード名欄に、変更フィードの名前を指定します。
「次へ」をクリックして、変更フィードの設定を確認してください。
すべての構成が正しいことを確認したら、リージョン間レプリケーションの準拠性をチェックし、 [作成]をクリックします。
設定を変更したい場合は、 「前へ」をクリックして前の設定ページに戻ってください。
シンクはまもなく開始され、シンクのステータスが「作成中」から「実行中」に変わるのが確認できます。
変更フィード名をクリックすると、チェックポイント、レプリケーションレイテンシー、その他のメトリックなど、変更フィードに関する詳細情報が表示されます。
Dumplingを使用している場合は、既存のデータをロードしました後に GC 時間を元の値 (デフォルト値は
10m) に戻す必要があります。
SET GLOBAL tidb_gc_life_time = '10m';