(文档)第124讲:异构数据库同步利器 — SynchDB使用全攻略

目标

• 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。

视频内容可以查看https://www.cuug.net/open/course/190

相关推荐
风哥2号4 小时前
数据库教程FGMT28‑Windows‑MySQL5.7‑8.0‑8.4-9.7安装配置
数据库·mysql
2601_9622186111 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
李高钢12 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
yuzhiboyouye14 小时前
那xml对应的sql语法,列举一下
xml·数据库·sql
. . . . .14 小时前
乐观锁 vs 悲观锁
数据库·sql
Leo.yuan14 小时前
2026年多数据库实时同步的四种架构方案及工具推荐
数据库·架构
hasty15 小时前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
梦想平凡16 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
凤山老林16 小时前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
企业数字化笔记16 小时前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端