CData Sync を使って変更データキャプチャ(CDC)でPostgreSQL のデータをMySQL にレプリケートする方法

對馬陽子 | 2022年09月12日

こんにちは。マーケティング担当の對馬です。

今回はPostgreSQL のデータをMySQL にレプリケートする処理を、CData Sync を使って構築する方法をご紹介します。CData Sync はPostgreSQL の変更データキャプチャ(CDC機能)に対応しているので、CDC 機能でのレプリケーションの設定方法をご紹介します。

CData Sync とは

CData Sync はデータパイプラインツールで、ノーコードで扱うことができます。400+ のデータソースに対応しており、主要DB / DWH にデータをレプリケートします。

https://www.cdata.com/jp/sync/

CDC 機能

変更差分のデータを記録するPostgreSQL の機能です。CData Sync ではPostgreSQL のログを参照して変更データを確認するため、DB に負担を与えることなく差分データをPostgreSQL から取得しレプリケーション処理を実行します。

PostgreSQL の商談データをMy SQL にレプリケート

PostgreSQL に格納している商談データを、CDC 機能を使ってMySQL にレプリケートする処理をCData Sync を使って構築します。

利用するPostgreSQL のデータ(Opportunity テーブル)

PostgreSQL でのCDC 事前設定

PostgreSQL のCDC 設定内容を確認し、設定します。

現在の設定内容を確認します。

PostgreSQL を開き、以下のクエリを実行します。

SELECT name, setting FROM pg_settings WHERE name='wal_level';

デフォルトでは、wal_level がreplica になっています。Logical Decoding を利用するため、レベルをlogical に変更します。

wal_level の変更

wal_level の設定変更は、設定ファイルを直接修正します。PostgreSQL インストールディレクトリから、postgresql.conf ファイルを開きます。

ディレクトリ例:C:\Program Files\PostgreSQL\14\data\postgresql.conf

wal_level = replicalogical に変更し、有効にします。

修正後はPostgreSQL の再起動をし、PostgreSQL でwal_level が変更されているか確認します。

レプリケーションスロットの割り当て

レプリケーションスロットを使って、Logical Decoding で変更情報をキャプチャするための設定をします。

以下クエリを実行することで設定できます。

SELECT * FROM pg_create_logical_replication_slot('cdatasync_replication_slot', 'test_decoding');

pg_create_logical_replication_slot 関数の引数は下記のとおりです。

  • レプリケーションスロットの名前
  • 出力プラグイン名 ※test_decoding は本体付属のプラグイン

以上で、PostgreSQL でのCDC 設定は完了です。

CData Sync でのPostgreSQL 接続設定

※ハンズオンでは不要※

CData Sync でPostgreSQL のデータを取得するため、接続を構築します。

CData Sync を起動し、「接続」タブを開きます。

「接続の追加」よりCData Sync からの接続を追加します。「PostgreSQL」アイコンを選択します。

PostgreSQL の接続設定画面が開かれます。

接続の名前は「PostgreSQL」などわかりやすいもので設定します。

今回はパスワードでの認証で接続するため、Auth Scheme でPassword を選択し必要な情報を入力します。入力が終わりましたら、「接続テスト」ボタンで接続を確認します。接続が確認できたら、「変更を保存」ボタンで設定内容を保存します。

MySQL 接続設定

CData Sync からのMySQL への接続を設定します。「接続」タブを開き、「接続の追加」の「同期先」から「MySQL」アイコンを選択します。

MySQL 接続設定画面が開かれます。

「MySQL」などわかりやすい名前を設定します。接続に必要な情報を入力し、「接続テスト」ボタンで接続を確認します。

接続成功のメッセージを確認し、「変更を保存」ボタンで設定内容を保存します。

ジョブの作成

作成したPostgreSQLとMySQL の接続設定を使い、データレプリケーションのジョブを作成します。

「ジョブ」タブを開き、「ジョブを作成」ボタンを押下します。

ジョブ作成画面が開かれます。

以下を設定します。

設定項目 設定内容 備考
ジョブ名 わかりやすい名前 例:PostgreSQL2MySQL
ソース 作成したPostgreSQL 接続設定
同期先 作成したMySQL 接続設定 ※テキストでは接続名が異なるものを利用しています
レプリケーションの種類 変更データキャプチャ
Logical Replication Slot レプリケーションスロット名 cdatasync_replication_slot

設定ができたら「作成」ボタンを押下し、ジョブを作成します。

ジョブが作成され、設定画面が開かれます。

ジョブ設定から「テーブルを追加」ボタンを押下し、レプリケートするテーブルを選択します。

スキーマで「public」を選択し、Opportunity テーブルを選択します。「追加」ボタンを押下し、選択したテーブルを追加します。

「変更を保存」ボタンで設定内容を保存します。

CData Sync での設定は以上です。

ジョブの実行

ジョブを実行します。テーブルにチェックを入れ、「実行」ボタンでジョブを実行します。

実行結果がCData Sync 画面に表示されます。

MySQL でデータを確認します。

Opportunity テーブルがMySQL に追加され、データがレプリケートされています。

CDC を使った差分レプリケーションの確認

初回実行のため、PostgreSQL テーブルのデータ全件がMySQL にレプリケーションされました。PostgreSQL のOpportunity テーブルに任意のデータを追加します。

CData Sync から、再度ジョブを実行します。

追加分のデータがMySQL に追加されたことが確認できます。

まとめ

PostgreSQL の変更データキャプチャを使って、CData Sync 経由でのMySQL への差分更新ができました。いかがでしたでしょうか。今回はMySQL への処理を構築しましたが、Google BigQuery といったクラウドDWH などにも対応可能です。

CData Sync は30日間の無償トライアルがありますので、ぜひ体感してください。

https://www.cdata.com/jp/sync/