1 背景

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

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

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

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

2 停服迁移法

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

操作方式如下:

  • 数据迁移

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

方法分析:

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

3 日志法迁移

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

操作方式:

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

方法分析

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

4 双写法迁移

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

方法分析:

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

5 总结

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

数据库数据迁移的3种方案学习相关推荐

  1. 数据迁移的几种方式 - MySQL数据库

    写在前面:博主是一只经过实战开发历练后投身培训事业的"小山猪",昵称取自动画片<狮子王>中的"彭彭",总是以乐观.积极的心态对待周边的事物.本人的技 ...

  2. 数据脱敏的 6 种方案

    一.什么是数据脱敏 英文全称:Data Masking . 先来看看什么是数据脱敏?数据脱敏也叫数据的去隐私化,在我们给定脱敏规则和策略的情况下,对敏感数据比如 手机号.银行卡号 等信息,进行转换或者 ...

  3. 达梦7数据库数据守护集群 技术方案

    达梦数据库数据守护集群 技术方案 目录 1 DM7数据守护集群部署实施流程 3 1.1 流程 3 1.2 系统架构图 3 1.3 网络拓扑图 4 2 部署规划 4 2.1 路径规划 4 2.2 实例规 ...

  4. oracle 数据库数据迁移解决方案

    大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,接下来把心得与大家分享一下 去年年底做了不少系统的数据迁移,大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移, ...

  5. MySQL 数据库平滑扩容的6 种方案剖析

    1. 扩容方案剖析 1.1 扩容问题 在项目初期,我们部署了三个数据库 A.B.C,此时数据库的规模可以满足我们的业务需求.为了将数据做到平均分配,我们在 Service 服务层使用 uid%3 进行 ...

  6. 多租户数据隔离的三种方案

    一.多租户在数据存储上存在三种主要的方案,分别是: 1. 独立数据库 这是第一种方案,即一个租户一个数据库,这种方案的用户数据隔离级别最高,安全性最好,但成本较高. 优点: 为不同的租户提供独立的数据 ...

  7. 数据库数据迁移失败,如何进行修复操作

    云数据库RDS(ApsaraDB for RDS,简称RDS)是一种稳定可靠.可弹性伸缩的在线数据库服务.基于飞天分布式系统和全SSD盘高性能存储,支持MySQL.SQL Server.Postgre ...

  8. mongo数据同步的三种方案

    (一)直接复制data目录(需要停止源和目标的mongo服务) 1.针对目标mongo服务已经存在,并正在运行的(mongo2-->mongo). 执行步骤: (1).停止源/目标服务器的mon ...

  9. MySQL数据库数据迁移

    最近因为需要更换MySQL数据库服务器的原因,需要将原服务器上的MySQL数据迁移到另外一台服务器上.找了半天发现一款数据库的迁移工具,实测很不错. 简介: DBConvert for MySQL & ...

  10. mysql数据库数据迁移_MySQL数据库迁移详细步骤

    ========================================================================================== 一.背景简介 == ...

最新文章

  1. 机器人 瓷砖墙面清洗_瓷砖铺贴注意事项有哪些?
  2. 本田、大众宣布智能路口研究新进展 以安全为重点
  3. 在iOS 8中使用UIAlertController
  4. ecm工作原理 usb_USB中CDC-ECM的了解和配置
  5. WebGL on iOS8 最终等到了这一天
  6. java使用缓冲区读取文件_在Java中使用Google的协议缓冲区
  7. LVM (Logic Volume Management,逻辑卷管理)
  8. jenkins自动部署windwos服务器
  9. 【华为云技术分享】【DevCloud · 敏捷智库】如何利用核心概念解决估算常见问题
  10. android怎么注释代码块,Android.mk 代码注释
  11. 51Nod-1031 骨牌覆盖【递推】
  12. MFC(6)点击按钮弹出新的对话框源码
  13. XenCenter开启虚机提示VDI不可用
  14. 北京某数据中心全年用水量分析
  15. 随笔之---java版本哲学家就餐问题【信号量的实现】
  16. BUUCTF-MISC-被劫持的神秘礼物~梅花香之苦寒来
  17. 微信关注公众号获取用户名的方法
  18. opencv求矩阵的逆_使用OpenCV求模拟矩阵的逆矩阵
  19. 基于Unity3D的调用摄像头功能的实现
  20. Angular4与PrimeNG

热门文章

  1. 文献翻译——基于关联规则挖掘识别的鸡源大肠杆菌共有多重耐药模式(上)
  2. asp 服务器文件重命名,aspupload文件重命名及上传进度条的解决方法附代码
  3. android toast 大小,Android Toast实现全屏显示
  4. Ubuntu软件下载速度慢解决
  5. U-Net源码上实现自己数据集的分割任务
  6. 使用Calibre Web打造全功能书库
  7. 支持python的云虚拟主机_云虚拟主机运行python(能运行python的主机)
  8. win7忘记密码不用工具进入
  9. 利用modem发传真
  10. 图形学空间坐标变化之二维图形观察及变换