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

相关推荐
程序员小八7775 小时前
MySQL 事务:一文把 ACID、隔离级别、MVCC、锁全串起来
数据库·mysql
lzhdim6 小时前
提高 SQL 语句执行速度的方法
java·开发语言·数据库·sql·oracle
ltl6 小时前
ClickHouse Distributed 引擎与分布式查询路由
数据库
Wang's Blog6 小时前
PostgreSQL笔记60: 权限与角色管理——从层级体系到最佳实践
数据库·笔记·postgresql
whcyhhh7 小时前
头歌实践教学平台:大数据存储2023(六)
大数据·数据库·python
Elastic 中国社区官方博客8 小时前
让大模型思考,让小模型执行:在 Elastic Workflows 中拆分 LLM 成本
大数据·运维·数据库·人工智能·elasticsearch·ai
Faith_xzc9 小时前
一条 SQL 顶一条 Flink 链路?Doris Streaming Job 持续导入全景解析
大数据·数据库·sql·flink
这个DBA有点耶11 小时前
多模数据库深度解读:从“多库拼装”到“一库多能”的架构演进
数据库·mysql·dba
程序员夏洛12 小时前
MySQL 默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
艺术留白12 小时前
MokaTest使用篇-SQL接口
数据库·sql