目标
• synchdb概述
• synchdb安装
• synchdb应用案例
Synchdb 概述
SynchDB是一个PostgreSQL扩展,旨在实现从多个异构数据库到PostgreSQL的快速且可靠的数据复制。它无需中间件或第三方软件,可直接实现同步,无需额外的编排。
SynchDB是一个双语模块,结合了Java(用于利用DebeziumEmbedded连接器)和C(用于与PostgreSQL核心交互)组件,并且需要Java虚拟机(JVM)和Java本地接口(JNI)共同运行。
Synchdb 架构

Synchdb 组件
SynchDB 扩展由以下主要组件组成:

Synchdb 特性
SynchDB 扩展有以下主要特性:


• Supports JSON rule file to define custom:
Data type transform rules
Column name transform rules
Table name transform rules
Data expression transform rules
• Supports 2 data apply modes (SPI, HeapAM API)
• Supports several utility functions to perform connector operations:
start
stop
pause
resume
Synchdb 安装指南
安装前查看README.md安装指南,里面讲得非常详细,分为以下几个主要部分。
• synchdb简介与支持的异构源数据库软件版本.
• 架构介绍.
• 依赖软件介绍,所需软件较多.
• 构建过程介绍,有多种构建方式
• 连接器配置过程
• 基本使用介绍
Synchdb 构建前提条件
构建和运行SynchDB需要以下软件。
• Java Development Kit 17 or later. (sudo apt install openjdk-17-jdk)
• Apache Maven 3.6.3 or later. ( sudo apt-get install maven)
• PostgreSQL source (16, 17, 18).
• Unix based operating system like Ubuntu 22.04 or MacOS
• libprotobuf-c-dev ( sudo apt-get install libprotobuf-c-dev )
Postgresql 软件安装
本次选择源代码方式,安装synchdb前需要满足以下条件。
1、源代码安装Postgresql软件需要包含openssl
$./configure --with-ssl=openssl
2、安装pgcrypto插件
$cd /soft/postgresql-16.3/contrib/pgcrypto
$make
$sudo make install
$psql -U postgres -d postgres
postgres=# create extension pgcrypto;
Synchdb 安装
虽然可以使用ezdeploy.sh进行部署,但是里面用到的数据库镜像文件的网站经常失效,看似简单部署,实际上问题重重,不建议用这个方式安装。
1、下载
https://github.com/Hornetlabs/synchdb (Tags选择下载1.3版本)
2、解压软件包,一定要解压到pg安装软件的contrib目录下,并改名为synchdb
$tar -vxf synchdb-1.3.tar.gz -d /soft/ postgresql-16.3/contrib
3、构建和安装debezium runner
$cd /soft/ postgresql-16.3/contrib/synchdb
$make build_dbz
$sudo make install_dbz
4、构建和安装oracle parser
$make oracle_parser
$sudo make install_oracle_parser
5、构建和安装synchdb
$make WITH_OLR=1
$sudo make WITH_OLR=1 install
6、配置linker,告诉linker系统java虚拟机位置
JAVA_PATH=/usr/lib/jvm/java-21-openjdk-amd64
JDK_HOME_PATH=(readlink -f {JAVA_PATH} | sed 's:/bin/java::')
JDK_LIB_PATH=${JDK_HOME_PATH}/lib
sudo echo "$JDK_LIB_PATH" | sudo tee -a /etc/ld.so.conf.d/x86_64-linux-gnu.conf
sudo echo "$JDK_LIB_PATH/server" | sudo tee -a /etc/ld.so.conf.d/x86_64-linux-gnu.conf
sudo ldconfig
7、验证
在/soft/postgresql-16.3/contrib/synchdb目录下执行以下命令。
$ldd synchdb.so
结果如下所示:

Synchdb 应用
1、安装synchdb插件
postgres=# create extension synchdb;
2、创建数据库连接器
SELECT synchdb_add_conninfo('mysqlconn',
'mysql',
3306,
'mysqluser',
'mysqlpwd',
'inventory',
'postgres',
'null',
'null',
'mysql');
3、查看连接器信息
postgres=# select * from synchdb_conninfo;
4、添加表映射(注意源数据库端表必须要有主键约束,否则无法初始化数据)
postgres=#SELECT synchdb_add_objmap('mysqlconn','table','inventory.dept','public.dept');
postgres=#SELECT synchdb_add_objmap('mysqlconn','table','inventory.emp','public.emp');
5、在目标数据库创建跟源数据库表结构相同的表
CREATE TABLE DEPT
(DEPTNO int PRIMARY KEY, DNAME varchar(14) ,LOC varchar(13) ) ;
CREATE TABLE EMP
(EMPNO int primary key,
ENAME varchar(10),
JOB varchar(9),
MGR int,
HIREDATE DATE,
SAL int,
COMM int,
DEPTNO int);
6、启动synchdb engine
连接器可以通过`synchdb_start_engine_bgw()`函数启动。该函数接收一个连接器名称参数,以下命令以默认快照模式启动同步引擎,该模式会复制指定的表模式及其初始数据,并继续流式传输实时变更(CDC)
postgres=#select synchdb_start_engine_bgw('mysqlconn');
7、查看引擎状态
postgres=# select * from synchdb_state_view;
8、查看数据库后台日志信息

9、验证
在mysql数据库端进行dml操作,查看目标端数据库表数据的同步情况。
注意:mysql数据库的binlog必须打开,并且格式为row
mysql> show variables like 'binlog_format';
mysql> show variables like 'log_bin';
注意:目标数据库postgresql.conf配置
listen_addresses = '*'
port = 5432
pg_hba.conf文件配置
host all all 0.0.0.0/0 md5
DDL复制支持注意事项:
• 支持alter table add/drop column
• 支持create table(必须是曾经同步过的表被删除后重建可以同步)
• 支持drop table
• 不支持truncate
• 不支持主外键约束(可以在启动连接器后在源数据库再加外键约束,但是不会同步)
• 如果synchdb engine无法正常启动,最快的解决办法就是先删除synchdb插件,再添加对象映射,最后启动synchdb engine。