mysql迁移到金仓数据库(V8R3)方案

​ 本次迁移为停机停服迁移,无需保障服务不中断,不存在在线数据实时迁移问题。为了实现mysql数据库迁移到金仓数据库,我们需要从以下几方面考虑解决方案

金仓与mysql数据库差异/字段类型/语法差别文档(无官方文档,自己梳理)

mysql迁移到金仓数据抽取&转换过程(金仓已提供)

数据一致性校验工具(金仓迁移工具提供数据量对比)

sql自动检查工具(待开发)

针对触发器/存储过程/java对象/sql具体差异修复,统一(如果能改成统一语法,建议改成统一语法兼容多种数据库)

回滚工具(如果发生较大失误,直接切换回原先的mysql数据库)

​ 由于老系统较多,迁移工作量巨大,本次迁移采用mybatis插件自动转换部分sql语法差异,部分差异手动修改,以此来减小工作量,以下针对具体差异点详细说明:

group by的差异(由于具有多意性,只能由人工根据业务具体修改)

boolean类型的差异(由于涉及到java字段类型修改,为了以后多数据库考虑,建议修改为char(1),t表示true,f表示false)

时间默认值的差异(根据业务修改具体代码,建议以后不设置默认值)

自增字段差异(一般在初始化中设置,数量较少,迁移后包含对应语句,手动修改)

建表的差异(一般在初始化中设置,数量较少,迁移后包含对应语句,手动修改)

mysql使用`区分关键字,金仓不支持使用关键字;mysql不严格区分''和"",金仓严格区分,''常量定义,""表示现有对象引用

mysql函数ifnull,金仓使用nvl(插件自动转换)

金仓中sql不能出现!='' ,不会报错,但是执行结果null。金仓中null和空字符串等价。(代码优化,工具检测)

金仓中默认无uuid,使用CREATE EXTENSION "uuid-ossp";SELECT * FROM uuid_generate_v4();(手动创建,插件转换)

金仓图形化界面有些sql返回和命令行返回有差异,例如SELECT CURRENT_TIMESTAMP(6),在图形化工具中只能返回到秒

时间函数差异:mysql:select date_add(now(), interval 1 day); SELECT datediff( '2001-09-29 03:00', '2001-09-27 02:00');

金仓:SELECT CURRENT_TIMESTAMP(6)+INTERVAL '1' DAY;SELECT DATE '2001-09-29 03:00' - DATE '2001-09-27 02:00';(插件转换已知能转换的)

数据库迁移时间

​ 根据目前已知问题和以前经验推测,一个项目预计迁移耗时2周左右(80表左右),不包含完整测试时间,与具体改动紧密相连,更准确的时间可以根据一个具体项目迁移耗时评估。

相关技术组件使用变动

​ 由于未来多数据库是必不可免的趋势,公司部分技术组件选型需要重新考虑:

mycat由于仅仅支持mysql,2016年断更,以后放弃使用,取代组件等以后调研后具体确定

mybatis plus由于提供的注解和代码拼接方式有可能为数据库迁移带来更多的工作量,在没有明确的兼容结果和修改方案出来前,新代码暂时

不考虑注解和代码拼接的方式,而是直接在xml文件中写sql文件

为了减小以后迁移数据库的工作量,以后数据库orm推荐使用mybatis。

hibernate和jdbc直连方式以后新项目不再推荐使用

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐