Dbswitch适配GaussDB开源开发任务总结

举报
纷纷扰扰 发表于 2024/11/20 01:55:11 2024/11/20
【摘要】 背景Dbswitch是一个提供源端数据库向目的端数据库的离线批量迁移同步功能,支持数据的全量和增量方式同步。在项目中看到有人贡献了opengauss的代码,支持opengauss与个各种数据库之间的数据迁移。opgengauss和GaussDB是孪生兄弟,内部特性有很大的趋同,所以借此来适配一下GaussDB数据库,给大家在使用Dbswitch做GaussDB相关数据迁移的时候提供一个参考。...

背景

Dbswitch是一个提供源端数据库向目的端数据库的离线批量迁移同步功能,支持数据的全量和增量方式同步。在项目中看到有人贡献了opengauss的代码,支持opengauss各种数据库之间的数据迁移opgengaussGaussDB是孪生兄弟,内部特性有很大的趋同,所以借此来适配一下GaussDB数据库,给大家在使用DbswitchGaussDB相关数据迁移的时候提供一个参考。

Demo设计

根据计划书可知需要dbswitch适配GaussDB, dbswitch-admin需要支持GaussDB,数据同步迁移需要采用配置文件和web页面两种方式验证GaussDB迁移。根据计划书内容简易的Demo设计如下:

开发过程

1. dbswitch官方仓库fork代码

2. 修改dbswitch-admin中代码

a) dbswitch中添加全局版本号

<opengauss.version>5.1.0-og</opengauss.version>

<pagehelper.version>1.4.7</pagehelper.version>

b) dbswitch-admin/pom.xml添加依赖

<dependency>

<groupId>org.opengauss</groupId>

<artifactId>opengauss-jdbc</artifactId>

<version>${opengauss.version}</version>

</dependency>



c) 修改pagehelper版本

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper-spring-boot-starter</artifactId>

<version>${pagehelper.version}</version>

</dependency>

d) 添加dbswitch-admin/application-opengauss.yml示例配置

spring:

datasource:

driver-class-name: org.opengauss.Driver

url: jdbc:opengauss://127.0.0.1:8000/dbswitch?currentSchema=public

username: root

password: 123456

validation-query: SELECT 1

test-on-borrow: true

flyway:

locations: classpath:db/postgres

baseline-on-migrate: true

table: dbswitch_schema_history

enabled: true


适配过程

GaussDB适配有关驱动:

(1)使用原生postgre驱动;

(2)使用GaussDB官网驱动gsjdbc4.jar替换原生postgre驱动验证;

(3)使用原生OpenGauss驱动;

(4)使用GaussDB官网驱动opengaussjdbc.jar替换原生OpenGauss驱动验证;


过程

dbswitch-admin模块支持mysql,postgresql和opengauss。我们加入GaussDB去做验证。这个模块里面涉及启动脚本初始化,脚本地址:https://gitee.com/dromara/dbswitch/tree/master/dbswitch-admin/src/main/resources/db/postgres

验证过程如下:

1. 使用原生postgres驱动

驱动版本

<dependency>

<groupId>org.postgresql</groupId>

<artifactId>postgresql</artifactId>

<version>42.2.18</version>

</dependency>

运行结果:报错

问题分析:

org.postgresql.util.PSQLException:Invalid or unsupported by client SCRAM mechanisms

跟踪驱动代码

得出结果:Postgresql使用SCRAM机制进行用户名+密码认证

查看PostgresqlGaussDB的默认加密类型

Postgresql:https://www.postgresql.org/docs/12/encryption-options.html

GaussDB:

    

结论

通过上面的代码追踪和数据库查看可以知道PostgreSQL在10版本之后使用的是SCRAM/SASL的连接认证方式,GaussDB使用的是sha-256的认证方式,两者的认证方式不一样。默认不可用PostgreSqL驱动连接GaussDB。


2. 使用GaussDB官网驱动gsjdbc4.jar替换原生postgre驱动验证

驱动版本:gsjdbc4.jar

驱动地址https://dbs-download.obs.cn-north-1.myhuaweicloud.com/GaussDB/1716950374370/GaussDB_driver.zip

验证过程

1) 下载官方驱动使用mvn install:install-file 打到本地仓库

2) 在pom中引用

3) 启动项目验证,结果如下

总结:官方驱动使用org.postgres.Driver驱动名称可以连接GaussDB.

    注意点:gsjdbc4.jar和postgresql官方驱动的驱动名称都是<org.postgres.Driver>,如果在项目中同时引用,驱动默认引用的是postgres驱动包下的驱动类。


3. 使用原生OpenGauss驱动

驱动:

<dependency>

<groupId>org.opengauss</groupId>

<artifactId>opengauss-jdbc</artifactId>

<version>5.1.0-og</version>

</dependency>

过程:

1) 清除上一步创建的表

2) 引入opengauss驱动

3) 修改驱动类为org.opengauss.Driver

4) 验证结果


总结:opengauss驱动可以适配GaussDB


4. 使用GaussDB官网驱动opengaussjdbc.jar替换原生OpenGauss驱动验证

驱动版本opengaussjdbc.jar

驱动地址https://dbs-download.obs.cn-north-1.myhuaweicloud.com/GaussDB/1716950374370/GaussDB_driver.zip

验证过程

1) 清除上一步生成的表

2) 下载官方驱动使用mvn install:install-file 打到本地仓库

3) 在pom中引用opengaussjdbc.jar

4) 启动项目验证


总结:opengauss驱动可以适配GaussDB


遇到的坑

1. 脚本初始化失败

分析:插入的初始化数据address字段不能为null

查看原始表sql

查看GaussDB生成的表:

可以看出原来的表和生成的表默认值不一样,原始的表默认是空字符,生成的默认是null为什么呢?

最终在官网查到是如下内容:


https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-1825.html

原来是和兼容模式有关,所以在建库的时候要选择兼容的模式

例如:

CREATE DATABASE <your-database> DBCOMPATIBILITY 'PG';


2. 分页报错

点击分页查询相关的页面,提示如下报错

分析:和分页插件Pagehelper有关,debug看看代码

    缺少dialectClass。通过https://cloud.tencent.com/developer/article/2229619 了解到前人踩坑过程,是Pagehelper插件的问题,针对dialect的处理机制:默认它会通过配置的连接串用mysql去识别,换了连接串后,需要通过配置文件指定mysql 配置文件的参数,有横线和驼峰的区别(1.4.4版本之前,有bug,只能识别驼峰式的配置)。我这里处理直接升级pageehelper版本到1.4.7后解决此问题。

适配验证过程

1. 验证思路

1) 基于conf/config.yml配置的dbswitch-data模块启动

dbswitch-data打包部署到华为云CCE,配置conf,只执行一次,查看数据验证。

2) 基于conf/application.yml配置的dbswitch-admin模块启动

dbswitch-admin打包部署到华为云CCE上,暴露端口访问。在页面上面完成数据源配置做验证。

3) 脚本

Mysql脚本

PostgreSQL脚本


2. 基于conf/config.yml配置的dbswitch-data模块

a) 配置数据源

b) 查看运行日志

c) 查看数据库


3. 基于conf/application.yml配置的dbswitch-admin模块

a) 修改配置启动dbswitch-admin

修改application.ymlspring.Profiles.include为opengauss

配置application-opengauss.ymljdbc连接信息

执行bin路径下的startup.sh启动项目

b) 登录页面配置数据源

配置Mysql

配置Postgresql

配置GaussDB兼容mysqlPG的数据源

最终数据源

c) 查看数据同步

Mysql -> GaussDB

数据同步成功

Postgresql -> GaussDB

4) 系统日志


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。