(文档)第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

相关推荐
_Kafka_1 小时前
Oracle EBS 有期间控制的模块
数据库·oracle
light blue bird2 小时前
工序 BOM 协同系统架构多模块组件
数据库·信息可视化·.net
appearappear2 小时前
优雅实现・高并发下大量数据乐观锁批量更新(MySQL 最优实践)
数据库·mysql
TG_yunshuguoji2 小时前
腾讯云代理商:腾讯云CloudBase数据库操作全解析
数据库·人工智能·云计算·腾讯云·cloudbase
运维行者_2 小时前
通过Applications Manager的TCP监控确保无缝网络连接
运维·服务器·网络·数据库·人工智能
j7~3 小时前
【MYSQL】视图--详解
数据库·mysql·视图的定义·视图的基本使用·视图的规则和限制
我是一颗柠檬3 小时前
【Redis】主从复制Day9
java·数据库·redis·后端
Wenzar_3 小时前
GeoHash+Redis Streams实时围栏系统实战
java·数据库·redis·junit
侯盛鑫3 小时前
理解 RocksDB IngestExternalFile
数据库·后端