最近要把一个项目的老系统的sqlserver库迁移到新系统的mysql库,工作量着实很大。
我们需要整理出新旧表的字段区别,同步旧库数据到新库,然后通过代码做一些初始化操作(比如给新增字段设置默认值,设置关联值)。
新系统的库里的表是重新设计,80%的表是原来老系统都有的,但是大部分表都新增了公公共一些字段(如del_flag、update_time, update_id等),不同的表可能还会新增一些业务字段。
下面介绍一下使用navicat数据迁移的思路。
说明一下,目前新库和老库都是存在的,新库是已经开发设计好的,需要将老库数据迁到新库
navicat数据传输功能必须用同一个类型的数据库,结构同步则不限制
数据迁移可以使用一些开源工具如kettle,这里不用,只用navicat实现
一、将sqlserver库数据原封不动传输到mysql临时库
这里并不是直接转,而是新建一个mysql临时库,然后通过navicat的工具数据传输将sqlserver库同步到mysql新库。
所有表和所有数据都同步到新库,这个数据传输工具是不区分数据库类型的,不同的数据库都可以传过来。
左边是sqlserver连接,右边是mysql连接
可以选择指定的要传输的表,我这里用4张表演示
二、结构对比,分析出新库较老库新增和删除字段
使用navicat工具,结构同步,来看新库多了哪些字段,或者少了哪些字段
注意,我们这里只是对比,不要进行同步哦
然后可以判断出新增和减少了哪些表,每个表新增和减少了哪些字段
三、mysql临时库数据传输数据到目标库
对比出结果后,我们可以整理一份文档,留着后面使用
现在我们可以先把老库的mysql版本数据传输到新库
使用navicat的数据传输功能操作,这里就不贴图了
四、对新增字段设置初始值
很多新增字段,如一些冗余字段(为了提升查询性能),一些业务字段需要通过一些查询再设置值的
这些我们都可以使用2种办法。
1、在传输数据后,再执行一个sql脚本去update表set值
2、通过代码,查询出某个表所有数据,然后进行set值
两者是互相配合的,当然能用sql脚本直接上最好,需要靠代码计算或者调用微服务系统去获取值的才使用代码执行,
使用代码设置初始值需要考虑执行的顺序,比如a表依赖b表的值,需要先初始化b表的值再去操作a表,可以写一个调用链路去做
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏