kingBase数据库
之前做过mysql国产化,人大金仓数据库的数据迁移和适配,大部分忘记了,这边补充下当时的一些思路和笔记
背景:
当时项目要求国产化,mysql数据库迁移到人大金仓kingbase。原项目是springboot+mysql+activiti的一个工作流项目。
一、数据库搭建
具体搭建步骤忘记了,需要注意系统版本和kingbase版本适配,具体需要询问金仓的人
二、初始化脚本
当时想了两个方案
1)根据mysql建库脚本手动改成kingbase脚本 ,比较麻烦
2)用金仓提供的数据迁移工具,将mysql迁移到kingbase,然后导出成sql脚本
推荐方式二,因为初始化脚本很多字段需要一一匹配很麻烦。迁移的时候要注意一些字段的转换,以及activiti框架初始建表的blob数据类型,编码方式不一致,手动无法生成,一定要数据迁移过去再导出。
三、框架适配
1)activiti框架
可以参考kingbase官方给的文档,网上可以找到。主要是 修改activitiConfig配置类方言,改成postgreSql的形式 和 初始建库脚本,因为项目的activiti表不通过框架创建,而是通过初始化脚本,所以省去这一步。
2)mybaties-plus框架
同样官方有适配文档,修改config类的方言,改成postgreSql就行
四、代码适配
代码上改动不大,主要是kingbase对比mysql数据类型的匹配更严格,比如旧代码中有部分mysql匹配不严格,比如:字段integer类型,用string类型的值去匹配也能查出来。但是kingbase之后,必须将值转为integer类型。就是 :select id from xxx where status = ‘1’ ;在mysql 成功,在kingbase失败,一定要 select id from xxx where status = 1;
五、一些常用命令
脚本执行方式:
1、用root用户执行createdb.sql,建库建用户脚本
./home/kingbase/kingbase1/KESRealPro/V008R006C006B0013/Server/bin/ksql -h 127.0.0.1 --port 54321 -f createdb.sql -Uroot -a >> a.result
2、用assistance用户执行初始化和601数据库脚本
./home/kingbase/kingbase1/KESRealPro/V008R006C006B0013/Server/bin/ksql -h 127.0.0.1 --port 54321 -f V1.1.01501_init.sql -Uassistance -dassistance -a >> 1.result
./home/kingbase/kingbase1/KESRealPro/V008R006C006B0013/Server/bin/ksql -h 127.0.0.1 --port 54321 -f V1.1.01501.sql -Uassistance -dassistance -a >> 2.result
./home/kingbase/kingbase1/KESRealPro/V008R006C006B0013/Server/bin/ksql -h 127.0.0.1 --port 54321 -f V1.1.01601.sql -Uassistance -dassistance -a >> 3.result
./home/kingbase/kingbase1/KESRealPro/V008R006C006B0013/Server/bin/ksql -h 127.0.0.1 --port 54321 -f V1.1.01601_version.sql -Uassistance -dassistance -a >> 4.result
六、碰到问题
1、大小写适配问题
金仓字段名好像默认是不判断大小写,需要在数据库安装的时候选择配置
2、函数找不到
group_concat函数,mysql有这个函数,金仓没有。需要手动去编写生成函数,现在应该可以直接用gpt生成,方便很多。
3、integer(1)和boolean的转换
好像是这两个数据类型,反正需要配置一下适配
资料:
1)人大金仓官网有项目适配文档
2)数据库迁移工具和可视化工具