目录

一 老库表写收口

二 平滑迁移数据

三 业务影响最小

四 增量数据回写

五 迁移回滚方案

六 业务流量灰度

七 如何进行测试

八 老库下线

九 事前、事中、事后、我们应该做什么呢


本文主要讲解数据从老库迁移到新库过程中遇到的问题,以及针对这些问题给出的解决方案,希望能给你一点点启发或者帮助。

一 老库表写收口

由于多个业务端的多个服务公用一个老库,且多个服务访问老库共用一套密码。

如何确定只有我们对老库的表进行写入呢?

为了排除还有其他业务端服务直连老库,写老库的表,我们给表添加了一个字段,比如是 A,来标识是我们端对表的写入。如果不是我们端对表的写入,该字段应该是空值。

为什么一定需要确定写收口呢

假设有某个业务端的服务对老库的表进行写入,然后我们进行了数据迁移,那新老数据库的表的数据将不一致,这在业务上面是不能忍受的。

二 平滑迁移数据

我们端这块有4个表,共1亿的数据,需要进行迁移。这块的核心点是:如何解决迁移数据耗时的问题、如何减少表停写时间对业务测影响问题。

一开始我们定的方案是 RD 停写,DBA 通过脚本执行命令,将历史数据从老库直接迁移到新库,整个过程评估预计需要1小时,这将意味着需要停写1小时,然后将这个结果同步给业务方,业务方无法忍受这个结果。

如何解决迁移数据耗时的问题?

我们使用 ALI 的 DTS 对数据进行迁移。DTS 能同步历史数据和增量数据。

历史数据是迁移了,那如何做到平滑呢?

我们这块将新库集群当做老库的从库进行数据同步,当我们这块进行业务停写的时候、且新库和老库的数据一致的时候,DBA 将新库集群中的一台机器升级为主库,其他机器挂载到这个主库,当做这个机器的从库。

三 业务影响最小

数据迁移过程中,如果能做到对业务无感,是最好的。那如何做好对业务影响最小呢?

首先,我们通过业务数据进行分析,找到业务的低谷。在低谷进行数据迁移操作,对业务影响小。

其次,我们是分钟级别的停写,在停写的时候,我们一直是可读的。这个在业务上是可以忍受的。

四 增量数据回写

为什么要数据回写呢?

在迁移数据的过程中,由于一些团队排期问题,服务读取的还是老库,这个时候为了保证其他团队能读取到增量数据,保证业务不受影响,我们这块通过 Databus 对数据进行了同步,回写到老库。

当然了,我们的期望是只维护新库,所以我们要求其他业务端对读收口进行了排期,2个月之后其他业务端都走我们的接口,实现了读收口。

五 迁移回滚方案

回滚方案在数据迁移过程中不一定需要,但是从一件事情的完整度来说,还是需要的。针对这块数据迁移,我们需要考虑的是服务回滚、数据库回滚

服务回滚?

是说服务从读新库切换到读老库,这块可以做一个数据源动态开关,可以灵活切换访问新老数据源。

数据库回滚?

如果是增量数据我们需要将它们从新库同步到老库,保证数据的完整性。

六 业务流量灰度

如果是数据双写,目标是用新库逐步替代老库,为了保证业务的稳定性,需要进行流量灰度,所谓

流量灰度,就是将读流量逐步切到新库,进一步验证新库的稳定性。

七 如何进行测试

1 进行自动化测试,测试使用自动或测试平台,批量进行测试,提高测试效率和准确率。

2 进行流量回放测试,所谓的流量回放,就是将线上的流量进行录制,然后在测试环境进行重放,适合对大型项目重构进行测试。

八 老库下线

数据迁移完了就完了?不,我们还需要下线老库。

从公司资产角度考虑,有了新库,为了降低成本,我们需要将老库下线。

从一件事情完整性来看,我们迁移数据只是完成了90%,剩下的10% 我们需要对老库进行下线处理。

九 事前、事中、事后、我们应该做什么呢

事前:我们应该给公司的研发和业务发送邮件,邮件的主题、涉及范围、影响功能、数据迁移时间点、负责人、迁移方案、以及工作沟通群。

事中:我们研发应该和各个业务端确认方案的可行性、与 DBA、QA 建立紧密的沟通,随时同步方案进度、开发进度、迁移进度。

事后:我们研发应该发邮件告知研发和业务、BI、大数据等团队,已经完成数据库的迁移,及时同步迁移结果。工作沟通群里面也需要同步。

数据库迁移遇到的问题和解决方案相关推荐

  1. mysql数据库迁移方案_MySQL迁移升级解决方案

    原标题:MySQL迁移升级解决方案 任务背景 由于现有业务架构已不能满足当前业务需求,在保证数据完整的前提下,现需要将原有数据库迁移到另外一台单独的服务器上,在保证原有服务正常的情况下,将原有LAMP ...

  2. Mysql数据库迁移问题解决方案

    目录 问题描述 错误原因 解决方案 其他问题 运行选项问题 SQL代码问题 旧数据库迁移新数据库问题 问题描述 使用 Navicat 导入之前转储好的 sql 文件,报错 错误原因 1.在信息日志当中 ...

  3. 用友NC数据库迁移服务解决方案

    NC数据库迁移工具操作说明 NC数据库迁移工具的功能:不同数据库之间进行数据库迁移,目前支持oracle.sqlserver.DB2三种数据库互相迁移. 工具共有3个功能节点和一个后台任务组成,依次为 ...

  4. Oracle数据库迁移-基础

    Oracle数据库迁移-基础 作为一个开发人员,数据库知识肯定是需要我们掌握的.但是目前公司的数据库都是有专门的DBA维护的,一般都是给我们一个环境地址,然后我们书写CRUD SQL.而且公司产品要求 ...

  5. Asp.Net MVC CodeFirst模式数据库迁移步骤

    利用Code First模式构建好基本的类后,项目也开始搭建完毕并成功运行,而且已经将数据库表结构自动生成了,但是,我有新的类要加入,有字段需要修改,就得将这部分修改同步到数据库中,利用数据库迁移,将 ...

  6. 如何使用 abp 创建 module 并应用单独的数据库迁移

    最近在学习使用 abp 来做一些小程序.abp 是一个功能丰富的 .NET 开发框架,完全开源,遵循 DDD(领域驱动)设计模式,支持微服务开发,集成了 Identity.角色权限.本地化.动态代理. ...

  7. 从SQL Server到多数据库,微软数据库迁移全攻略

    据了解,截止到 2022,云迁移市场规模将达到 1290 亿美元,云迁移服务市场的利润率达 26.7%.数据库作为企业迁移上云的关键环节,自然成为了各大云厂商关注的重点,除了提供各种各样的云端数据库, ...

  8. aws 数据库迁移_AWS Loft的数据库周

    aws 数据库迁移 这是我的笔记: https://databaseweekoctober2019sf.splashthat.com AWS上的数据库:合适工作的合适工具 在许多此类谈话中,我并没有做 ...

  9. dts数据库迁移工具_传统数据库迁移上云利器-ADAM

    自1970年关系型数据库被提出以来,至今已有50年历史.但在关系型数据库领域正在发生着巨大的变化,首先是互联网的发展,使得开源数据库越来越受欢迎,可扩展性成为支撑业务发展的重要特性,比如WebScal ...

最新文章

  1. 如何在mac下安装MPV播放器?
  2. 关于truncate与checkident
  3. plus rss.php,dedecms织梦rss输出改成全文输出
  4. 一个mui+ajax+php的demo
  5. 元宇宙iwemeta:2021年企业领袖榜公布,曹德旺为终身成就奖
  6. php redis 读写分离类,yii实现redis读写分离
  7. Jupyter Notebook简介及默认路径修改
  8. 测量仪图片_南昌高度仪价格,大行程非标影像测量仪组装
  9. 互联网企业的电子商务社区会员模式浅谈
  10. 【Java】利用循环嵌套实现输出一天的小时和分钟
  11. rcnn代码实现_轻松学Pytorch实现自定义对象检测器
  12. 跨行业的Java程序员——农民造出了飞机,难道还是农民
  13. 利用XMLHTTP无刷新添加数据之Post篇(转)
  14. Notification(一)系统通知的监听移除
  15. atitit.提升软件开发效率大的总结O5
  16. 一文速学-时间序列分析算法之一次移动平均法和二次移动平均法详解+实例代码
  17. CS224n(一) 自然语言处理与深度学习简介
  18. word被锁定无法编辑怎么处理
  19. 云计算与虚拟化的区别
  20. Ajax的readyState和status

热门文章

  1. 你还没搞懂的微信小程序,已成今年双十一电商黑马
  2. linux IIC子系统分析(九)——实例分析通过设备节点访问I2c设备
  3. IEEE会议期刊检索查找
  4. 计算机同等学力申硕有哪些学校,同等学力申硕院校及专业有哪些呢
  5. 《唐诗三百首》数据源网络下载
  6. 免费创建2020年圣诞贺卡
  7. 图文细描:Maven Profiles 与 Spring Profiles 多环境配置
  8. 《细说PHP(第2版)》图书信息
  9. 年羹尧之死对后人的警示(转)
  10. steam 安装及简易设置