MYSQL数据库迁移KingBase人大金仓数据库一篇文章全搞定(附所遇题目即解决 ...

打印 上一主题 下一主题

主题 951|帖子 951|积分 2853

目录
概要
安装人大金仓数据库
KINGBASE数据库迁移工具
KingBase集成SpringBoot
题目总结,埋坑填坑
题目一:Activiti兼容题目
题目二:sysDate() 函数题目
题目三:“” 字符串双引号兼容题目
题目四:group by聚合函数使用题目
更改kingbase设置文件,解决语法题目
总结

概要

应公司要求需要把原先使用的Mysql数据库迁移到KingBase人大金仓数据库中,其中需要留意的是数据格式以及数据兼容性题目,mysql和kingbase数据库中的sql差异,可以在这个链接中查看mysql和kingbase之间的语法区别:点击这里,然后废话不多说开始进行数据库安装迁移操作
安装人大金仓数据库

到这个地址安装人大金仓数据库留意选择版本 点击下载

下载完数据库后下载授权文件,待会要用到

下载完成将数据库以及授权文件全部拉到Linux服务器下
之后创建用户,专用来操作KingBase相干的任务
   useradd -m kingbase
  

设置kingbase的登岸密码
   passwd kingbase
  

创建数据库安装目录,并赋予权限
   mkdir -p /opt/Kingbase/ES/V8
    chown -R kingbase:kingbase /opt/Kingbase/ES/V8
  

之后就可以进行KingBase的挂载了
   mount KingbaseES_V008R006C008B0014_Lin64_install.iso /opt/Kingbase/ES/V8/
输入这个命令将iso文件挂载到V8目录下,然后切换到kingbase用户下进行数据库安装
    su - kingbase
cd /opt/Kingbase/ES/V8/
./setup.sh -i console # 执行安装脚本,命令行安装
  


出现这个页面然后可以一起回车 直到出现 完全安装 的选项,选择完全安装 --> 选择授权文件 --> 选择安装目录 --> 等待安装 --> 选择数据存储路径 --> 设置初始化参数

其中选择授权文件就是咱们开始时往opt目录下放的授权文件,我们这个时候新打开一个窗口将这个授权文件解压一下然后放到自己指定的一个目录里

这里我将这个文件放在了 /opt/license/license_39893目录里 /opt/license/license_39893/license_39893_0.dat

在这一步可以直接按照缺省文件夹安装,假如回车出现只可读不可写的权限题目,可以新开一个页面重新创建一个文件夹然后重新赋权 然后选择新建的文件夹作为安装路径

之后可以一起回车安装完成 然后切换为root用户输入指令,注册为体系服务
   /opt/KingbaseES/V8/install/script/root.sh
  之后我们可以毗连下数据库看是否可以毗连成功首先辈入安装目录
   cd /opt/KingbaseES/V8/Server/bin
  使用软毗连方便毗连数据库
   ln -s /opt/KingbaseES/V8/Server/bin/ksql /usr/bin/ksql
  使用命令毗连数据库
   ksql -p 54321 -U system test
  

我们也可以使用数据库可视化工具毗连服务器数据库

输入自己的服务器的ip 默认端口测试链接出现上面画面即毗连成功,这时候我们的迁移目标数据库已经安装完毕,接下来可以进行数据库迁移。

KINGBASE数据库迁移工具

人大金仓数据库提供给我们有数据库迁移工具,在将数据库安装完毕后也附带安装了数据库的可视化迁移工具,我们只需要启动迁移工具在可视化界面上添加一些设置即可进行迁移。
启动前需要了解到,人大金仓数据库迁移工具需要适配JDK,并且现在只可以适配JDK11版本或以上,所以启动前需要先检查一下自己的jdk
   java --version
  javac --version
  因为我没是新安装的linux所以还没下载jdk,假如已经有了jdk需要先删撤除 然后在安装

下载jdk11 压缩包然后放在linux文件夹中,进行解压然后设置环境变量
卸载原先jdk以及安装新的jdk可以参考这篇文章:点击这里
安装完成后输入指令检查是否安装成功出现下图样式即说明安装成功

接下来我们需要进入数据库迁移工具软件的目录下
   cd /opt/KingbaseES/V8/ClientTools/guitools/KDts/KDTS-WEB
  然后将咱们新安装的jdk 拷贝到这个目录下然后进行更换

   cp -r /usr/local/jdk-11.0.2/ /opt/KingbaseES/V8/ClientTools/guitools/KDts/KDTS-WEB
  -- 将原先的jdk包先拷贝更名以防万一
   mv jdk jdk-bak
  将拷贝过来的jdk-11 更名为jdk
    mv jdk-11.0.2 jdk
  

之后进入bin目录 进行启动
   ./startup.sh
  


启动后会出现上面这个提示 这个时候我们可以输入我红框标出来的 tail -f语句 来看一下启动环境

出现这一行及说明启动成功,这个时候我们可以输入这个地址,端口是54523来查看迁移工具可视化界面

出现这个页面即为启动成功接下来我们可以进行迁移
首先我们点击数据库管理来设置源数据库和迁移数据库的信息

输入源数据库的ip 端口,用户名密码后可以点击测试来测试毗连,如测试成功说明源数据库就设置成功了

同样设置好迁移目标数据库则可以进行数据迁移,点击迁移任务管理,点击新建,选择源数据库和迁移数据库点击下一步

这个时候我们会看到源数据库中的数据库信息,我们选择要迁移的库进行迁移,目标属主选择system表示当前用户即可进行下一步

内部一些参数假如没有适配原因暂时不需要更改,直接点击保存并迁移

保存后 我们可以在任务列表中看到我们的迁移过程,迁移进度

这个时候发现迁移失败了,可以点进去看以下错误日志,看是什么原因导致的

错误日志显示我的yf_user_info表中 貌似因为自增的列出现了题目,这个时候我们可以去源数据库中查看这张表中的自增列数据是否有题目

这里可以看到我的这张表有一个自增列,并且这个列是主键,碰到这个题目,属于兼容题目,这是kingbase的一个坑,凡是和auto_increment相干的异常报错的,都是kingbase版本题目 ,我联系到kingbase运维人员后,运维人员告知,有自增相干键的都要安装V80020或以上版本的数据库,


我这里安装的是V814的所以出现这个题目,通过手动操作也可以解决,大概直接安装我上面所说的指定版本数据库都可以,手动解决的话就是在原先的mysq数据库中将对应的出现题目表的自增建先取消掉,然后在迁移数据,迁移数据成功后在重新加上自增索引,并指定自增位置,另外在迁移工具中设置版本时不管是V820版本或是V9版本都需要将版本号这一栏选择为V9

我这里作为演示就不重装kingbase数据库了,暂时用去掉自增建的方式迁移数据,建议看这篇文章的小伙伴安装指定的kingbase数据库

去掉这个表的自增然后重新启动迁移任务

这时候发现数据已经迁移成功然后到kingbase数据库查看表是否存在

发现数据没题目,说明迁移成功,然后执行下面的sql为id加上自增

   CREATE SEQUENCE table_seq START WITH 1 INCREMENT BY "起始主键位置";
    alter table "表名" alter column "主键名" set default nextval('table_seq')
  到这一步迁移就算成功了,接下来我们吧kingbase集成到springBoot项目中去
KingBase集成SpringBoot

原先的项目是springboot+mysql+mybatis,我们只需要将mysql换成kingbase,依赖和设置相干的改一改,下面实际操作

首先到这个地址下载对应的jar包依赖:下载jar包
然后在项目中新建libs文件夹,将下载的这几个jar包放在文件夹

然后到pom上注释掉原先的mysql依赖,将我们新加上的jar包引用上
  1.   <!-- MySQL Connector/J -->
  2. <!--        <dependency>-->
  3. <!--            <groupId>mysql</groupId>-->
  4. <!--            <artifactId>mysql-connector-java</artifactId>-->
  5. <!--            <version>8.0.28</version>-->
  6. <!--        </dependency>-->
  7.         <!--添加KingBase所需要的依赖-->
  8.         <dependency>
  9.             <groupId>com.kingbase</groupId>
  10.             <artifactId>kingbase8</artifactId>
  11.             <version>8.2.0</version>
  12.             <scope>system</scope>
  13.             <systemPath>${pom.basedir}/libs/kingbase8-8.6.0.jar</systemPath>
  14.         </dependency>
复制代码


依赖引用上之后,我们就可以,将设置文件中原先集成mysql的设置文件改成kingbase

  1. # 数据源配置
  2. spring:
  3.     datasource:
  4.         driverClassName: com.kingbase8.Driver
  5.         url: jdbc:kingbase8://192.168.253.175:54321/test?currentSchema=yfdb
  6.         username: system
  7.         password: root
  8.         type: com.zaxxer.hikari.HikariDataSource
  9.         hikari:
  10.             minimum-idle: 5
  11.             maximum-pool-size: 15
  12.             auto-commit: true
  13.             idle-timeout: 30000
  14.             pool-name: DatebookHikariCP
  15.             max-lifetime: 1800000
  16.             connection-test-query: SELECT 1 FROM DUAL
复制代码


设置完成之后则可以进行启动测试,启动项目看是否会有题目,正常环境来讲设置好这个位置之后是可以正常启动项目标。        

项目启动成功,说明数据库兼容没有题目,接下来可以测试下业务功能

使用postman执行了一个新增操作报错自增键已存在题目,这里可能是因为赋值的时候忽略了已经存在的id参数,到数据库更新一下自增建起始位置

执行上面这两个sql重新赋值,然后再次调用接口发现成功新增

这个时候可以看一下是否数据已经新增到kingbase数据库

数据新增成功说明没题目,到这里测试结束,后面总结一些碰到的题目,坑之类的
题目总结,埋坑填坑

题目一:Activiti兼容题目

首先,因为KingBase是国产数据库,所以针对国外的一些中间件可能会有兼容性题目,比如我有一个项目用到了流程引擎,Activiti6这个流程引擎,这里就对Activiti不兼容,解决方案找了很多,最终找到人大金仓维护人员提供了解决方案,首先可以先看一下金仓的官方文档:官方解决文档

解决方案实在很简单,将设置文件中的毗连更换成我们libs目录下的postgresql即可,官方运维人员解释pg形态的包集成了这些环境,所以假如项目中包含了Activiti流程引擎,可以将依赖和毗连更换成下面这种样式即可以成功兼容Activiti
pom依赖换成这个:

  1.   <!--添加KingBase所需要的依赖-->
  2.         <dependency>
  3.             <groupId>com.postgresql</groupId>
  4.             <artifactId>postgresql</artifactId>
  5.             <version>42.2.9</version>
  6.             <scope>system</scope>
  7.             <systemPath>${pom.basedir}/libs/postgresql-42.2.9.jar</systemPath>
  8.         </dependency>
复制代码

数据库毗连文件改成如许的:

  1. # 数据源配置
  2. spring:
  3.     datasource:
  4.         driverClassName: org.postgresql.Driver
  5.         url: jdbc:postgresql://192.168.253.180:54321/test?currentSchema=yfdb,productName=PostgreSQL,SYS_CATALOG,PUBLIC
  6.         username: system
  7.         password: 123456
  8.         type: com.zaxxer.hikari.HikariDataSource
  9.         hikari:
  10.             minimum-idle: 5
  11.             maximum-pool-size: 15
  12.             auto-commit: true
  13.             idle-timeout: 30000
  14.             pool-name: DatebookHikariCP
  15.             max-lifetime: 1800000
  16.             connection-test-query: SELECT 1 FROM DUAL
复制代码
之后可以重新启动项目就可以集成Activiti了
题目二:sysDate() 函数题目

mysql和Oracle中的当前时间函数 sysDate() 也就是获取当前时间年月日的值的方法,在Kingbase中写法是不一样的,所以在sql中假如要兼容,就是改成kingbase兼容的格式:sysdate,金仓数据库中的这个函数没有括号直接就是:sysdate。
题目三:“” 字符串双引号兼容题目

在kingbase数据库中查询字符串类型数据时用的是‘’单引号来查询,而在mysql和Oracle中用的是双引号,所以假如项目中需要将“”双引号更换为‘’单引号来进行适配,另外还有一种方法,后面来解说。


题目四:group by聚合函数使用题目

在mysql中group by作为根据某个字段分组展示如许的一个函数,但是在kingbase的使用中group by不可以在普通的查询语句中使用类似如许:

假如要包管可以使用需要在查询字段中只保存作为分组的那个字段类似如许:

但是我们在sql中每每不会如许更改,所以可以用第二种解决方案,这个解决方案需要更改kingbase数据库的设置文件,更改后可以解决单双引号题目,以及group by使用题目
更改kingbase设置文件,解决语法题目

首先去我们的安装目录找到kingbase设置文件 kingbase.conf

设置文件在:
   /opt/KingbaseES/V8/data
  

在这个文件的最后加上
   sql_mode=''
  保存后输入指令重启kingbase服务让设置生效
   systemctl restart kingbase
  之后我们可以在数据库中测试一下更改之后的运行效果

发现已经可以执行,说明已经可以正常使用group by语法了!
总结

经过上面这些步骤基本可以保障数据库的安装和迁移,以及集成spring项目,数据库是全部项目标核心所在,是最关键,最告急的,一切基础都是创建在数据库之上,人大金仓数据库日益壮大,吧项目摆设在如许优秀的数据库上更安心,更放心,上面总结的题目只是我在迁移适配过程中碰到的,假如小伙伴有碰到其他题目可以留言评论区,我也会更新新的题目供各人参考,假如觉得这篇文章帮到了您,点个收藏,点个关注,持续更新更多优秀文章帮助小伙伴们,感谢!!







免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表