概要
做的政务项目,使用的MySQL数据库,做国产化改造,需要使用国产数据库,记录一下整个过程。
整体思路以及实施过程
1.数据库适配
一般有2种方案
-
第一种:完全将代码的的MySQL语法修改为达梦语法,这点改动根据使用的语法去评估,可能有不适配或者改动很按大的情况,具体涉及到的语法可以参考:https://gitee.com/myth20/mysql2dm-spring-boot-starter/blob/master/DETAIL.md
-
第二种是将的MySQL语法修改为达梦语法,通过一个中间代理的方式访问达梦数据库,官网提供了解决方式,gitee有开源的源码,编译打包后制作程镜像,引入starter,就可以直接引用
-
官网解决方案地址:https://eco.dameng.com/community/training/2bab324e5b1b37e917493a97666ab142
2.数据迁移:使用达梦的数据库迁移工具
达梦提供了数数据迁移的工具,适合做数据的迁移,但是不一定完全兼容,例如字段类型,数据非空判断等不一定全部兼容,需要迁移后,做系统的测试
先从官网下载window安装包,解压后可以看迁移工具,下载地址:https://eco.dameng.com/download/
包含了表结构迁移和数据迁移
数据库配置的改动
- MySQL设置计算精度,默认不保留小数导致原sql出了问题
sp_set_para_value(2,'CALC_AS_DECIMAL',1);
- group by 默认必须跟所有的查询字段
select a,b,count(c) as count from tb1 group by a,b
,分组必须更具a,b字段一起,如果要修改,需要修改以下配置
sp_set_para_value(1,'GROUP_OPT_FLAG',1);
实操过程
下载源码编译,源码地址:https://gitee.com/myth20/mysql2dm-spring-boot-starter/tree/master
上传到镜像仓库,加入依赖
### 添加达梦数据库驱动
<dependency>
<groupId>com.dameng</groupId>
<artifactId>DmJdbcDriver18</artifactId>
<version>8.1.2.79</version>
</dependency>
### 添加达梦proxy进行语法转换 这里修改了stater版本号为1.0.0
<dependency>
<groupId>com.myth</groupId>
<artifactId>mysql2dm-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
修改数据库配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# driver-class-name: com.mysql.cj.jdbc.Driver 替换为达梦依赖
driver-class-name: dm.jdbc.driver.DmDriver
username: root
password: abc123
# 修改为dm链接
url: jdbc:dm://ip:port/database/rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8
测试结果
会有转换后的语法日志,快速发现转换后存在的问题
小结
第一种方式,需要全量核对sql语法,缺点是工作量大,第二种相对更便捷的,但是也存在不兼容的语法,语法的转换也存在性能消耗,需要手动去适配,第二中方式也可以用在一些其他中间件的迁移上,例如xxl-job,nacos使用这种方式替换底层使用的数据库(做国产适配的时候);
后面会分享xxl-job,nacos 底层数据库替换源码,提供sql表结构以及源码仓库