SQL Server のデータを変更データキャプチャ(CDC)でTiDB に差分連携する:CData Sync

こんにちは、シニアプロダクトスペシャリストの宮本です!

今回は クラウドネイティブな NewSQL というカテゴリに属する TiDB に、オンプレ環境にある SQL Server のデータを変更データキャプチャ(CDC)でレプリケーションする方法をご紹介します。

レプリケーションの全体構成



オンプレ環境にある SQL Server のテーブルを、ETL/ELT ツールの CData Sync を通してクラウド上の TiDB に差分更新モードでレプリケーションを行う構成です。CData Sync はセルフホスティング型のレプリケーションツールですので、今回は SQL Server がある Windows マシンでホスティングし、SQLServer の変更データキャプチャ(CDC)機能を利用して差分データだけを TiDB に連携していきます。

TiDBとは

TiDB - 分散データベースソリューション - PingCAP株式会社

TiDB とは PingCAP 社にて開発されたオープンソースの データベースで、MySQL との互換性があり、NewSQL というカテゴリに位置付けされています。


特徴としては MySQL と互換性があるということから SQL でアクセスできるのに加え、オンライントランザクションもサポートしつつ、NoSQL のように分散型のデータベース構成で水平方向へのスケーラビリティにも対応され、まさに RDB と NoSQL の特徴的な部分を兼ね備えたデータベースとなっています。

TiDB は今回利用するクラウド版以外にインストール版もあるようです。

CData Sync とは


CData Sync はセルフホスティング or AWS での提供の ETL/ELT ツールです。

自動データレプリケーション | CData Software Japan

同期ジョブを実行するまでのステップが少なく、エンジニアでなくても容易に SaaS データを同期先 DB にレプリケートすることができます。

それではさっそくやっていきましょう。

手順

TiDB の作成(クラウド版)

まずは PingCAP 社の Webサイトにアクセスし、クラウド版 TiDBの無料トライアルを開始します。
TiDB - 分散データベースソリューション - PingCAP株式会社


1年間トライアルができる Developer Tier というアカウントを今回は選択します。


AWS でホスティングされた TiDB を作成するため画面下部の Create ボタンをクリックします。


TiDB の Root Password の設定と、アクセス元の IPアドレスを指定します。


以上で TiDB クラスタが作成されました。


あとで CData Sync から TiDB クラスタに接続するため、先に管理画面から接続情報を確認しておきます。


以上で TiDB の作成が終わりました。次は SQL Server の CDC 設定を行います。

SQL Server のCDC設定

まずは対象 DB を指定して CDC の有効化を行います。

USE sync;
GO
EXECUTE sys.sp_cdc_enable_db;
GO

CDC 機能を有効化しただけではまだ何もできないので、CDC 対象として設定したいテーブルを指定します。今回は Account というテーブルを CDC 対象にします。

EXEC sys.sp_cdc_enable_table 
@source_schema = N'dbo',
@source_name = N'Account',
@role_name = N'cdc_role',
@supports_net_changes = 1
GO

こうすることで CDC 関連のロールやテーブル、関数が作成されます。

最後に、変更データのキャプチャや履歴テーブルのクリーンアップを実行するためには SQL Server エージェントを開始させる必要がありますので、必ずオンにします。( SQL Server エージェントを右クリック→開始でOK)

これで SQL Server 側の設定が完了です。
続いて CData Sync のセットアップを行います。

CData Sync のインストール


CData Sync は Java 版、.NET 版、AMI のクラウド版があります。今回はローカルの Windows マシンを使用していることから .NET版をダウンロードします。
Data Sync Apps | CData Software Japan


ダウンロードしたインストーラーを実行するとセットアップウィザードが表示されるので、そのまま次へと最後まで進んでください。


インストールが完了したらスタートメニューから CData Sync を起動し、ログイン画面が表示されたらOKです。あとはログインユーザーを作成してログインするだけです。

SQL Server への接続設定

それでは CData Sync から SQL Server への接続情報を設定していきます。
接続→データソース→ SQL Server のアイコンの順にクリックします。

SQL Server の接続情報を入力したて右下の接続テストボタンをクリックします。
接続に成功しましたら右上のボタンで保存します。


続いて同期先 DB の接続設定を行います。

TiDB への接続設定

TiDB は MySQL と互換性があるので CData Sync からも MySQL コネクタの利用で接続することができます。
今度は同期先タブを選択し、MySQL アイコンをクリックします。


TiDB の作成時に確認した接続情報をもとに設定し、接続テストを行います。OKでしたらこちらも保存します。


これで接続設定が完了となります。

CDCによるレプリケートジョブの作成~実行

ジョブ一覧の画面を開き、右側のジョブを作成ボタンをクリックします。
ジョブ作成画面では下記を設定し作成します。

  • 任意のジョブ名
  • ソースに SQL Server
  • 同期先に TiDB
  • レプリケーションの種類を「変更データキャプチャ」


次は連携対象とする SQL Server のテーブルを選択しますので、テーブルを追加ボタンをクリックします。


レプリケーションしたい SQL Server のテーブルを選択します。

そうしますと連携用クエリが自動で作成されます。
今回は Accout テーブルの内容をそのまま TiDB にレコードベースでレプリケーションしていきます。
なお、左側のテーブルという列にある Accout という名前で、TiDB にもテーブルが作成されます。
もしテーブル名を変更したい場合は、REPLICATE [XXXX] ~ の [XXXX] を変更してください。


ではさっそく実行してみます。
作成したクエリにチェックを入れ、実行ボタンをクリックすると、

右側に実行日時とレプリケーション件数が表示されます。


では TiDB 側も確認してみますので、MySQL Workbench で接続して確認してみますと、
Account テーブルが作成され、中には SQL Server のレコードが連携されていました。

最後に CDC の検証として、SQLServer にあるレコードを1件更新した場合に、次回のレプリケートジョブでは1件だけが TiDB にレプリケーションされるのか試してみます。

SQL Server で 1件ほど下記名前で更新

update dbo.Account set Name='CDC Replicate to TiDB' where ID='0010K0000227pF8QAI';

TiDBの方はまだ更新前なのでこの名前で登録されています。

ではこの状態でもう一度レプリケートクエリを実行してみると、ちゃんと1件だけがレプリケーションされました。


TiDB の方では、このように「CDC Replicate to TiDB」という名前で反映されていることが確認できました!

おわりに


いかがでしたでしょうか。このように CData Sync から TiDB への接続は MySQL コネクタで簡単に接続することができ、CDC による DB to TiDB もいくつかの設定だけで実現することができました。
CData Sync では SQL Server のほかに Oracle や PostgreSQL でも CDC 連携が可能ですし、クラウドサービスのデータも幅広く対応しています。
こちらの CData Sync は 30日間の無償トライアルが可能となっていますので、ぜひこの機会にお試しいただけたらと思います。

自動データレプリケーション | CData Software Japan

トライアル・お問い合わせ

関連コンテンツ