株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

CData SyncによるPostgreSQL → MySQL 異種DB 準リアルタイム データ連携

Oracle ACE Proの渡部です。

本記事では、CData Sync を用いて、PostgreSQLからMySQLへのニアリアルタイム データ連携(論理レプリケーション)を構成する手順についてご説明します。

なお、弊社コーソルはCData パートナーであり、CData Syncの販売および導入、運用やトライアルの支援が可能です。

CData Syncとは

CData Syncは、非常に多くのデータベース製品、SaaS、アプリケーション、APIに対応したデータ連携ツールです。

以下の特徴を持ちます。

  • 同期元として400種以上の製品およびサービスに、同期先として30種程度のデータベース製品に対応
  • データベースからのChange Data Captureと、異種データベース間のロジカルレプリケーションに対応した製品としては、とても低価格
  • オンプレミス環境およびクラウド環境に対応
  • WebベースのGUI管理コンソールを用いて、お客様自身でデータレプリケーションを簡単に構成可能
  • 差分レプリケーション機能を持ち、サイズが非常に大きいデータでもデータレプリケーション可能。
  • Oracle Database、Microsoft SQL Server、PostgreSQL、MySQL、MariaDBからのChange Data Captureに対応
  • エージェントレス構成であるため、既存システムへ最小限の影響で導入可能
  • 方式がロジカルレプリケーションであるため、レプリケーション中にデータを変換したり特定のSQLを伝搬対象から除外したりすることが可能
  • 組込みスケジュール機能によるレプリケーションの自動化が可能

対象ソフトウェアおよび環境

  • CData Sync
    • v24.3 (24.3.9121.0)
    • クロスプラットフォーム版(Java版、オンプレミス / セルフホスティング)
    • systemdサービスとしてCData Syncを起動・運用
  • ソース データベース(同期元データベース)
    • PostgreSQL 16 (16.3)
    • 稼働ホスト: Oracle Linux 8
    • CData Syncコネクタ: 24.0.9060.0
  • ターゲット データベース(同期先データベース)
    • MySQL 8.0.37
    • 稼働ホスト: Oracle Linux 8
    • CData Syncコネクタ: 24.0.9106.0
  • 差分レプリケーション方式: CDC (PostgreSQL ロジカルデコーディング/レプリケーションスロット)

CData Syncのインストール

以下の記事でご紹介しているため、こちらをご覧ください。

ソースPostgreSQLの設定

CDCにロジカルデコーディング/レプリケーションスロットを使用するため、このための設定を行います。

  1. test_decodingプラグインを導入するため、postgresql16-contribパッケージをインストールします。

[実行例]

$ sudo dnf install postgresql16-contrib
Last metadata expiration check: 1:27:16 ago on Thu 06 Mar 2025 07:02:57 PM JST.
Dependencies resolved.
====================================================================================================================================
 Package                                Architecture             Version                             Repository                Size
====================================================================================================================================
Installing:
 postgresql16-contrib                   x86_64                   16.8-1PGDG.rhel8                    pgdg16                   768 k
Upgrading:
 postgresql16                           x86_64                   16.8-1PGDG.rhel8                    pgdg16                   1.9 M
 postgresql16-libs                      x86_64                   16.8-1PGDG.rhel8                    pgdg16                   329 k
 postgresql16-server                    x86_64                   16.8-1PGDG.rhel8                    pgdg16                   6.7 M

Transaction Summary
====================================================================================================================================
Install  1 Package
Upgrade  3 Packages

Total download size: 9.7 M
Is this ok [y/N]: y
  (略)
Upgraded:
  postgresql16-16.8-1PGDG.rhel8.x86_64   postgresql16-libs-16.8-1PGDG.rhel8.x86_64   postgresql16-server-16.8-1PGDG.rhel8.x86_64
Installed:
  postgresql16-contrib-16.8-1PGDG.rhel8.x86_64

Complete!
$
  1. wal_levelをlogicalに変更します。

[実行例]

$ psql
psql (16.8)
Type "help" for help.

postgres=# SELECT name, setting FROM pg_settings WHERE name='wal_level';
   name    | setting
-----------+---------
 wal_level | replica
(1 row)

postgres=# ALTER SYSTEM SET wal_level = 'logical';
ALTER SYSTEM
postgres=# SELECT name, setting FROM pg_settings WHERE name='wal_level';
   name    | setting
-----------+---------
 wal_level | replica
(1 row)
  1. データベース db1を作成します。

[実行例]

postgres=# CREATE DATABASE db1;
CREATE DATABASE
  1. PostgreSQLを再起動します。

[実行例]

$ /usr/pgsql-16/bin/pg_ctl stop
waiting for server to shut down.... done
server stopped
$ /usr/pgsql-16/bin/pg_ctl start
waiting for server to start....2025-03-06 22:20:34.030 JST [3520] LOG:  redirecting log output to logging collector process
2025-03-06 22:20:34.030 JST [3520] HINT:  Future log output will appear in directory "log".
 done
server started
  1. データベース db1に接続し、db1にレプリケーションスロット cdatasync_replication_slot を作成します。

[実行例]

$ psql -U postgres -h localhost -d db1
Password for user postgres:
psql (16.8)
Type "help" for help.

db1=# SELECT slot_name, plugin, slot_type, database, active, restart_lsn, confirmed_flush_lsn FROM pg_replication_slots;
 slot_name | plugin | slot_type | database | active | restart_lsn | confirmed_flush_lsn
-----------+--------+-----------+----------+--------+-------------+---------------------
(0 rows)

db1=# SELECT * FROM pg_create_logical_replication_slot('cdatasync_replication_slot', 'test_decoding');
         slot_name          |    lsn
----------------------------+-----------
 cdatasync_replication_slot | 0/8000148
(1 row)

db1=# SELECT slot_name, plugin, slot_type, database, active, restart_lsn, confirmed_flush_lsn FROM pg_replication_slots;
         slot_name          |    plugin     | slot_type | database | active | restart_lsn | confirmed_flush_lsn
----------------------------+---------------+-----------+----------+--------+-------------+---------------------
 cdatasync_replication_slot | test_decoding | logical   | db1      | f      | 0/8000110   | 0/8000148
(1 row)

db1=# exit

ソースPostgreSQLのユーザー/データの準備

ソースデータベース側で、連携対象のデータを準備します。 ここでは、ユーザーu2を作成し、ユーザーu2が所有するテーブルとしてデータベース db1にt2を作成し、テーブルt2にデータをINSERTしています。

$ psql -U postgres -h localhost -d db1
Password for user postgres:
psql (16.8)
Type "help" for help.

db1=# CREATE USER u2 PASSWORD 'Pass123-';
CREATE ROLE
db1=# GRANT ALL PRIVILEGES ON DATABASE db1 TO u2;
GRANT
db1=# CREATE SCHEMA u2 AUTHORIZATION u2;
CREATE SCHEMA
db1=# exit
$ psql -U u2 -d db1 -h localhost
Password for user u2:
psql (16.8)
Type "help" for help.

db1=> CREATE TABLE t2 (n integer primary key, s varchar(16));
CREATE TABLE
db1=> INSERT INTO t2 VALUES(1, 'AAA');
INSERT 0 1
db1=> INSERT INTO t2 VALUES(2, 'BBB');
INSERT 0 1
db1=> INSERT INTO t2 VALUES(3, 'CCC');
INSERT 0 1
db1=>
db1=> SELECT * FROM t2;
 n |  s
---+-----
 1 | AAA
 2 | BBB
 3 | CCC
(3 rows)

CData SyncでソースPostgreSQLへの接続を構成

ここでは、ユーザーpostgresで接続し、データベースに対する変更をキャプチャすることにしています。

  1. 「接続」をクリック

  1. 「接続を追加」をクリック

  1. ソースPostgreSQLに関する項目を入力し、「作成およびテスト」をクリック

ターゲットMySQLのデータベース/ユーザーの準備

ターゲットデータベース側で、データの連携先となるデータベースとユーザーを準備します。 ここでは、データベースdb1およびユーザーu1を作成しています。以下の手順に従います。

CData SyncでターゲットMySQLへの接続を構成

CData Syncの管理コンソールで、ターゲットMySQLへの接続「tgt_my」を構成します。以下の手順に従います。

CData Syncでジョブ(レプリケーションジョブ)とタスクを作成

CData Syncの管理コンソールで、でジョブ(レプリケーションジョブ)とタスクを作成します。

  1. 「ジョブ」をクリック

  1. 「ジョブを追加」をクリック

  1. 「新しいジョブを追加」をクリック

  1. 「名前」にジョブ名を入力

  1. データソースにソースPostgreSQLに対応する接続「src_pg」を選択

  1. 「変更データキャプチャ」を選択し、レプリケーションスロットに cdatasync_replication_slotを指定します。

  1. 同期先にターゲットMySQLに対応する接続「tgt_my」を選択

  1. 「ジョブを追加」をクリック。ジョブが作成されました。

  1. 「タスク」をクリック

  1. 「タスクを追加」をクリック

  1. スキーマに「u2」を選択します。

  1. ターゲット表として、「[u2].[t2]」を選択し、「タスクを追加」をクリックします。

  1. 「[u2].[t2]」を選択します。

ジョブの初回実行

作成したジョブを実行します。

  1. ジョブ「pg2my」の画面で「実行」をクリックします。

初回実行であるため、ターゲットMySQLに対してテーブルが作成され、ソースPostgreSQLのデータが連携されます(レプリケーションされます)。

# mysql -D db1 -u u1 -pPass123-
mysql: [Warning] Using a password on the command line interface can be insecure.
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.37 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from t2;
+---+------+----------------------------------------+
| n | s    | _cdatasync_deleted                     |
+---+------+----------------------------------------+
| 1 | AAA  | 0x00                                   |
| 2 | BBB  | 0x00                                   |
| 3 | CCC  | 0x00                                   |
+---+------+----------------------------------------+
3 rows in set (0.00 sec)

なお、_cdatasync_deleted列は、ソースデータベースにおけるデータの削除状況を示すフラグのような役割をする列です。

ジョブの2回目実行

ソースPostgreSQLにデータを追加してから、ジョブを実行します。 ジョブの実行手順は初回実行と同じです。 2回目の実行であるため、前回のジョブ実行からの差分だけがデータ連携(レプリケーション)されます。

ソースPostgreSQLにデータを追加

db1=> INSERT INTO t2 VALUES(4, 'DDD');
INSERT 0 1
db1=> INSERT INTO t2 VALUES(5, 'EEE');
INSERT 0 1
db1=>
db1=> SELECT * FROM t2;
 n |  s
---+-----
 1 | AAA
 2 | BBB
 3 | CCC
 4 | DDD
 5 | EEE
(5 rows)

ジョブ実行後、ターゲットMySQLでデータを確認

mysql> select * from t2;
+---+------+----------------------------------------+
| n | s    | _cdatasync_deleted                     |
+---+------+----------------------------------------+
| 1 | AAA  | 0x00                                   |
| 2 | BBB  | 0x00                                   |
| 3 | CCC  | 0x00                                   |
| 4 | DDD  | 0x00                                   |
| 5 | EEE  | 0x00                                   |
+---+------+----------------------------------------+
5 rows in set (0.00 sec)

ジョブ実行の自動化

スケジュールを設定して、ジョブ実行を自動化することも可能です。

なぜコーソルからCData Syncを購入すべきなのか

弊社コーソルはCData パートナーであり、CData Syncの製品販売を行います。加えて、コーソルが得意とするデータベース技術領域を含めたCData Syncの導入、技術支援、サポートを行います。

CData Syncを用いたデータ連携をご検討されている場合は、ぜひコーソルへご相談いただければとと思います。

  • 製品販売 : CData Syncの販売
  • 製品導入 : CData Syncの設計および導入
  • 製品サポート: CData Syncの製品サポート
  • 技術支援 : トライアル支援、運用支援

コーソルからCData Syncを購入いただくと

データベースのレプリケーションにおいては、データベース製品およびレプリケーション製品の両方の知識が必要です。このような知識を持つエンジニアの確保は一般に困難です。弊社のサービスがこの問題のお役に立てると考えております。

また、弊社からCData Syncを見積/購入いただくと、以下のサービスを無償でご提供いたします。

  • お客様構成にあわせた簡易導入手順書の提供
  • CData Sync 30日間トライアルライセンスを使用したトライアルの支援
  • トライアル実施時に参考となるチェックリストの提供
  • CData Sync導入後の運用支援(各種Q&A、Web会議、設定変更作業など)

多数のOracle関連書籍を執筆

コーソルはORACLE MASTER Platinum 累計取得者数No.1

コーソルからデータベース関連製品をご購入いただくと、ORACLE MASTER Platinum 単年取得者数7年連続No.1、2016年6月以降 累計保持者数No.1という指標に裏付けされた高い技術力により、安心して製品を導入/利用いただけます。

ORACLE MASTER Platinumとは、2日間にわたる実技試験により認定されるOracle Database最高難度の資格です。 グローバルで有効な資格であり、海外では"Oracle Certified Master"と呼ばれます。

Oracle DatabaseのDBAサービスを提供可能

Oracle Databaseについても製品販売、製品サポート、製品の導入を行います。また、リモート回線経由でスポット的なDBA実務を行うリモートDBAサービス、コンサルティングやベンダコントロールを含めたOracle Databaseプロフェッショナルサービスを時間制で提供する時間制コンサルサービスも提供しています。

基幹系DB運用支援および製品サポートについては、3拠点体制による24時間365日対応が可能です。

コーソルは多数のデータベース関連製品を取り扱っています

コーソルは、Oracle Databaseをはじめとするデータベース製品に関する深い知識を活かし、多数のデータベース関連製品を取り扱っております。

  • オラクル製品全般 (Oracle Database, Oracle Cloud, Oracle GoldenGate, Oracle WebLogic Serverなど)
  • Dbvisit Standby
  • SharePlex for Oracle
  • CData Sync
  • Qlik Replicate
  • Solarwinds Database Performance Analyzer (DPA)
  • Toad for Oracle / Toad for SQL Server
  • MaxGuage
  • Spotlight for Oracle / Spotlight for SQL Server
  • SIOS LifeKeeper
  • Delphix
  • PISO
  • D'amo
  • Nutanix Database Service (NDB)

これらの製品について、販売・導入・運用を様々な形でご支援します。お困りの際はぜひ弊社にお声がけくださいませ。

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ