SQL迁移到MYSQL数据迁移工具开发思路

本文介绍了一个自开发的数据迁移工具的设计思路,包括配置迁移任务(源表选择、数据拆分、时间范围配置)、执行迁移(多线程、表结构检查、数据转换与插入)及展示检查阶段。工具支持水平和垂直拆分,具备任务管理和进度显示功能,强调了目标表拆分字段建立索引的重要性以及迁移过程中的效率优化策略。
摘要由CSDN通过智能技术生成

我是八月柳,一个只讲思路的人!

这里讲讲数据迁移工具的开发,没有代码!

很多时候我们需要从其他数据库迁移到不同类型的数据库里面,就需要迁移工具了;

我们可以自己开发一个练练手!

先想想我们希望的工具是什么样子的,把这些希望都写下来!

我希望它能

  • 自动列出源数据库所有的表、字段名称
  • 可以配置目标表名称,字段名称
  • 可过选择哪些表不迁移
  • 可配置哪些表按照什么字段分表
  • 可配置目标表主键、索引字段
  • 自动在目标数据库创建表结构,配置好迁移方案时就生成创建语句,以备检查
  • 支持多线程
  • 迁移分阶段进行:

第一阶段:配置并创建迁移任务。(选择源、目标、需要迁移的表、字段、任务拆分配置等)

第二阶段:执行迁移任务。(可选择需要迁移的表、可重复执行)

第三阶段:展示并检查迁移结果。

第一阶段(配置):

1.配置迁移任务:

  • 列出源表清单,针对每个表做数据拆分配置,默认不拆分,勾选需要迁移的表,可多选,可全选;
  • 支持配置仅迁移某个时间段内的数据,默认全部迁移。
  • 可查询单个表某段时间的数据总量,供参考以什么时间单位拆分数据。
  • 配置可保存,若已创建某个表相同时间段的迁移任务,则不可修改配置方案,需要删除目标表,需先删除该表的迁移任务且清空目标数据,方可修改,询问用户是否清除(危险操作)。
  • 数据水平拆分:按时间单位(月、天、日、时、分)拆分,拆分字段选择(如:创建时间,所选字段源表以及目标表必须有索引,否则速度不理想);还是不拆分,不拆分迁移速度将很慢,且不能多线程。
  • 数据垂直拆分:划分目标表的字段,或者不拆分。

2.创建/删除迁移任务:

  • 根据已勾选的每个源表迁移配置,创建迁移任务记录,统计原表数据量;
  • 如果有水平拆分,则先根据拆分字段,查询出最近一条数据的拆分字段的时间,根据时间单位划分时间段,每个时间段一条任务记录,统计该时间段源数据量,并创建迁移任务记录。
  • 支持删除已创建的迁移任务。
  • 支持修改迁移时间段增加迁移任务。

 第二阶段(执行):

  • 读取迁移配置,读取需要迁移的表清单,以列表展示方式,勾选需要迁移的表,可多选。
  • 设置执行迁移任务的线程数量。
  • 根据设置的线程同时执行多个迁移任务。
  • 更新任务状态为已执行。
  • 读取迁移任务中的表名称表,在目标环境检查是否已存在,如果不存在则创建,主键字段建立索引,分表字段不为空则分表。
  • 检查目标环境字段清单是否一致,不 一致则重新建表。
  • 清空目标表数据。(若迁移方案为校验已存在数据,则不清空)
  • 读取源表数据,如果有水平拆分,则根据拆分字段以及开始、结束查询源表范围内的数据;
  • 转换目标字段数据类型(处理不同数据库之间类型不匹配问题)
  • 生成insert语句并执行,在目标表插入数据;
  • 若迁移方案为校验已存在数据,则根据主键字段查询数据是否已存在,不存在再插入;
  • 若源表数据量较大,可设定一个值,则继续根据向下拆分,在该时间段内,以更小的时间单位作为子任务并行处理。
  • 若插入完毕,则更新迁移任务状态为完成。
  • 中间可暂停/继续迁移。
  • 显示执行进度条。

第三阶段(展示并检查):

  • 列出迁移任务,可筛选表名称、迁移状态、可排序。
  • 对于某个未完成的迁移任务,可单独重新执行执行。
  • 可查询某个迁移任务已迁移的数据量。

对于迁移后的检查

表结构检查(人工)

数据行检查(工具)

数据值检查(人工)

迁移方案数据结构

方案ID,方案名称,源数据库类型,源数据库链接字符串,目标数据库类型,目标数据库链接字符串,是否校验已存在数据(主键字段必填),是否支持分库分,是否水平拆分,是否垂直拆分

需迁移的表清单

方案ID,源表名称,主键字段,水平拆分时间单位(年、月、天、时、分、秒),水平拆分时间字段名,创建时间,是否垂直拆分,建表语句,迁移开始时间,迁移结束时间

迁移表的字段:

方案ID,源字段名称,目标字段名称,源字段类型,源字段长度,目标字段类型,源字段长度,目标字段类型,目标字段长度

垂直拆分表清单

方案ID,目标表名称,分表字段,建表语句

迁移任务表结构

任务ID,配置ID,表名称,字段,是否分表,拆分时间单位,水平分表字段,是否水平拆分,迁移开始时间,迁移结束时间,是否垂直拆分,垂直拆分表名称和字段(JSON或明细表),源表行数,迁移状态,开始执行时间,最后执行时间,创建时间

迁移状态

未开始、已完成、出错、中断

需要注意的点:

  • 目标表数据拆分字段必须要建立索引,例如以创建时间拆分迁移任务,目标表的创建时间字段需要建立索引,没有索引统计数据量时就会很慢,而且随着数据迁移越来越多,就会越慢。要知道没有索引的全表扫描,对磁盘的压力是很大的,如果很多任务同时在进行全表扫描,那数据库几乎会崩溃,就好比在移动/复制多个文件的时候,windows系统弹出的等待窗口。
  • 创建拆分任务的时候,可以不统计源表的数据量,迁移完成后也可以不统计目标表的数据量,在检查阶段再单独统计,目的是优先把数据迁移过来加快速度。
  • 迁移的时候不做任何关联查询,只查询当前表的数据。
  • 支持单任务重跑

欢迎纠正,交流,分享

八月柳,一个只讲思路的人

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值