springboot 从mysql 迁移人大金仓 -kingbase

一、配置方法修改

1、添加maven依赖

<!-- 人大金仓 -->
            <dependency>
                <groupId>cn.com.kingbase</groupId>
                <artifactId>kingbase8</artifactId>
                <version>8.6.0</version>
            </dependency>

2、连接配置,修改 .yml 文件

# spring
spring:
  # datasource
  datasource:
    driver-class-name: com.kingbase8.Driver
    url: jdbc:kingbase8://IP:54321/数据库
    username: 账号
    password: 密码

3、mybatis-plus,修改 .yml 文件

添加人大金仓的单独的 mapper xml位置 :mapper-locations

列格式 column-format ,这个不用数据库关键字,理论不用加;就是库表设计不合理;

postgreSql

# mybatis-plus
mybatis-plus:
  # log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
  # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath*:mapper-kingbase/**/*Mapper.xml
  #开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true
    jdbc-type-for-null: 'null'
  global-config:
    banner: false
    db-config:
      logic-delete-field: DELETE_FLAG
      logic-delete-value: 1
      logic-not-delete-value: 0
      column-format: "\"%s\""

 mysql

# mybatis-plus
mybatis-plus:
  # log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
  # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:mapper/**.xml
  #开启驼峰命名
  configuration:
    map-underscore-to-camel-case: true
    jdbc-type-for-null: 'null'
  global-config:
    banner: false
    db-config:
      logic-delete-field: DELETE_FLAG
      logic-delete-value: 1
      logic-not-delete-value: 0
      column-format: "`%s`"

二、功能方面的修改

1、因为pgsql是强类型,所以

1)类型必须匹配

数据库是varchar ,则sql语句传递类型就是String

数据库是boolean,则sql语句传递类型就是Boolean

数据库是integer,则sql语句传递类型就是Integer

数据库是bigint,则sql语句传递类型就是Long

数据库是timestamp(6),则sql语句传递类型就是LocalDateTime

数据库是date,则sql语句传递类型就是LocalDate

2)mybatis xml 微调

尽量用 #{},${参数} 得根据类型确认是否加单引号;

3)数据库关键字不要加反引号  “`”;

三、使用相应类型的数据库函数

人大进程默认兼容模式有:oracle、pg、mysql 根据实际情况修改

注意分页语句差异,为了保证各数据库兼容性,这个关联查询全去掉 xml的分页参数,改为注入mybatis-plus的分页参数;

# 方案一:page 参数通过实体封装一个 HttpServletRequest 自动构造方法,核心就是自动构造page参数
Page<T> page = new Page<>(current, size);
if (ObjectUtil.isNotEmpty(orderItemList)) {
    page.setOrders(orderItemList);
}
# 那样xml就不用写分页参数了(下面的T不限制类型),但是需要加 param.属性
Page<实体Dto> getListByParam(Page<T> page, @Param(" param.属性") 参数Paran 参数Param);

# 方案二(未采用):为了xml少写 param.属性 ,可以所有查询参数集成自分页参数
# 那样实体代码得很规范,records、total、size、current、orders、optimizeCountSql
# 、searchCount、optimizeJoinOfCountSql ,这边做不到,所以未采用
 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 
public class UserPage extends Page<User> {
    private String name;
 
    // getters and setters
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

 postgresql的分页查询

select * from tab limit ${pageSize} offset ${startRow}

四、假设数据类型不一致

采用 USING column::转换后类型;,可以 using 方法::转换类型,例如 USING null::转换后类型;

ALTER TABLE tableName ALTER COLUMN column TYPE BIGINT USING column::BIGINT;

五、数据迁移:

用数据库迁移工具,从mysql迁移至kingbase,date 会转成pgsql中的date;但mysql datetime 会转成pgsql 中的timestamp(对应java中的LocalDateTime),只有部分类型存在问题,详见下面介绍

1、迁移工具配置

1)迁移目标模式选择 public,代码和配置不用做太多改动;

2)数据类型配置

我们这边tinyint,仅为tinyint(1) ,做boolean类型,所以配置迁移工具:tinyint 对应 kingbase中的 boolean;

数据库这边配置存储图片用的TINYBLOB、LONGBLOB、MEDIUMBLOB、blob,需要配置迁移工具转换类型对应bytea

bytea 可以存储最大 1 GB 的数据,bytea 的兼容性更高,可以避免修改大量的代码

注:如果你类型设置错误,需要删除迁移任务,关闭迁移工具的控制台,再次新建任务;

2、内置工具

后期规范了数据库:这边mysql 数据库用utf8mb4,导出sql语句不存在别的类型:这样直接迁移数据也不会中文乱码,迁移失败的只有索引的注释;

点击:然后访问 http://localhost:54523 或 https://localhost:54524http://localhost:54523 或 

2、navicat 的数据传输

如果您的数据库存在非utf8mb4 编码的类型,可能导致能迁移数据库和自增索引,迁移数据、很大概率报错,表注释乱码你可以导出sql批量删除一下编码定义,然后新建一个utf8mb4的数据库再导入mysql;

或者借助navicat, 能迁移 库表、数据和注释,迁移索引会报错,不能迁移自增索引;

所以这边综合:用 内置迁移工具迁移表结构(含自增索引,然后用navicat 迁移数据和注释

注:注释中的列明大写,要改成小写

六、原备份功能不可用,切换备份逻辑

springboot 人大金仓 kingbase-备份还原,命令中带密码,支持window和linux-CSDN博客文章浏览阅读152次,点赞3次,收藏4次。命令带密码参考Java代码实现国产人大金仓数据库备份还原需求-CSDN博客本人在一次项目中,遇到了需要在系统管理中提供给用户备份还原系统数据的功能,由于项目特殊性,项目底层数据库使用了国产人大金仓数据库(版本V8)。由于本人也是第一次使用金仓数据库,所以在功能实现过程中,踩到了一些坑,特此记录一下,共大家参考,避免踩到和我一样的坑。https://blog.csdn.net/qq_26408545/article/details/137747017?spm=1001.2014.3001.5502

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在将MySQL迁移人大金仓时,需要注意以下几点。首先,目前只支持迁移MySQL 5.1版本,其他版本可能会导致迁移过程中卡死。如果是高版本的MySQL,建议先将数据库使用Navicat迁移至低版本,然后再使用人大金仓进行迁移。其次,如果在迁移过程中无法检测到所有的表、函数、触发器等内容,可以使用人大金仓的社区工具进行迁移。先迁移数据库结构等内容,最后再利用数据库工具迁移数据。 具体操作步骤如下: 1. 打开人大金仓迁移工具,选中源数据库中所有的表和函数等内容。 2. 将选中的内容拖动到右侧的目标数据库(也称为模式)中。 3. 在右侧可以看到所有的函数、表和触发器等。 4. 确认无误后,点击“确定”按钮,即可完成MySQL迁移人大金仓的操作。 需要注意的是,以上是基本的迁移步骤,具体操作可能因环境和迁移工具的版本而有所不同。在进行迁移操作之前,建议先备份好原始数据库,以防止数据丢失。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [人大金仓Kingbase)数据库迁移——使用大金仓数据库迁移工具进行迁移](https://blog.csdn.net/csdn_db96/article/details/109166351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值