数据库数据迁移的3种方案学习

1 背景

日常我们开发工作中,随着业务需求的变更,重构系统是很常见的事情。重构系统常见的一个场景是变更底层数据模型与存储结构。这种情况下就要对数据进行迁移,从而使业务能正常运行。

常见的表变化有如下3种:

  1. 增加、删除、修改字段,对单表结构修改
  2. 进行分库分表
  3. 变更底层存储系统。例如数据库选型变更

当发生变更都要进行迁移。下面介绍3种常见的迁移思路。

2 停服迁移法

业务自身特点是非24小时提供服务,有暂停维护时间。这时可以在服务停止运行期间进行迁移。

操作方式如下:

  • 数据迁移
    • 数据导出
    • 分库分表工具,分库分表场景下选择正确路由方式
    • 数据导入
  • 数据对比
    • 数据量对比
    • 正确性对比
    • 路由策略验证(分库分表场景下)
  • 切换数据源
  • 恢复服务

方法分析:

  • 一次性迁移,简单好处理
  • 不存在一致性问题处理
  • 业务需要停服
  • 需要在指定时间内完成迁移

3 日志法迁移

mysql通过binLog完成主从同步,借助该思想完成迁移。 除了变更记录,还需要在分库分表场景下关注分表键或分库键,以及数据的时间戳。

操作方式:

  • 发生数据变更操作时,记录变更日志,逐渐,路由信息
  • 重放变更记录,完成新库写入
  • 写入后进行数据对比校验
  • 切换流量

方法分析

  • 这种方式对业务侵入性低。但是,当发生变更操作时就会产生新的日志记录。如果变更频率很高,会出现一致更新新系统。一段时间内数据无法一致,没法完成切换的情况发生。为了保证能够切换,变更业务在特殊场景下需要短暂停止。

4 双写法迁移

  • 对原库上的数据修改增加双写,即写原库时,增加写新库的操作。原库写入成功算成功,新库写入失败需要记录日志。
  • 通过对比工具,保证两库的数据一致
  • 写失败记录进行重放,此时保证时序性,避免旧的更新将新的更新数据覆盖掉
  • 读取数据切换到新库上
  • 停写旧库,下线旧库双写代码

方法分析:

  • 增加了业务代码的复杂度,及迁移流程增长。但避免了在写入量较大的场景下,新库更新追不上老库的情况。

5 总结

前文介绍了3种常见数据迁移思路。实际应用过程中可根据业务自身特点选择方案。此外根据数据库选型不同也有成熟的迁移工具可使用。避免重复的开发。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值