高并发系统设计 40 问
唐扬
美图公司技术专家
49013 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
高并发系统设计 40 问
15
15
1.0x
00:00/00:00
登录|注册

加餐 | 数据的迁移应该如何做?

部署应用服务器走云上的缓存节点
读取时放少量流量到云上副本组
异步写入云上的副本组
专线带宽和延迟
部署应用服务器走云上的缓存节点
读请求优先走云上的缓存节点
部署多个副本组
步骤
问题
步骤
切写时需要短暂停止写入
业务上基本没有改造的成本
简单易实施
回滚方案
切换写流量到新库
切换读流量到新库
配置备库为新库的从库
配置新库为旧库的从库
应用改造成本
时间周期较长
可随时回滚
数据迁移完成
切换读流量到新库
数据校验
改造业务代码,异步写入新库
配置新库为源库的从库
缓存迁移的方案
级联复制的方案
双写的方案
改造副本组方案预热缓存
使用副本组预热缓存
劣势
优势
步骤
劣势
优势
步骤
项目负责人的注意事项
数据迁移方案
缓存迁移方案
级联同步方案
双写方案
将应用从自建机房迁移到云上
一课一思
课程小结
数据迁移时如何预热缓存
如何平滑地迁移数据库中的数据
数据迁移的场景
数据迁移的重要性和繁琐性
数据迁移应该如何做?

该思维导图由 AI 生成,仅供参考

你好,我是唐扬。
在“数据库优化方案(二):写入数据量增加时,如何实现分库分表?”中我曾经提到,由于 MySQL 不像 MongoDB 那样支持数据的 Auto Sharding(自动分片),所以无论是将 MySQL 单库拆分成多个数据库,还是由于数据存储的瓶颈,不得不将多个数据库拆分成更多的数据库时你都要考虑如何做数据的迁移。
其实在实际工作中,不只是对数据库拆分时会做数据迁移,很多场景都需要你给出数据迁移的方案,比如说某一天,你的老板想要将应用从自建机房迁移到云上,那么你就要考虑将所有自建机房中的数据,包括 MySQL、Redis、消息队列等组件中的数据全部迁移到云上,这无论对哪种规模的公司来说都是一项浩瀚的工程,所以你需要在迁移之前准备完善的迁移方案。
“数据的迁移”的问题比较重要和繁琐,也是开发和运维同学关注的重点。在课程更新的过程中,我看到有很多同学,比如 @每天晒白牙,@枫叶 11,@撒旦的堕落等等,在留言区询问如何做数据迁移,所以我策划了一期加餐,准备从数据库迁移和缓存迁移两个方面带你掌握数据迁移的方法,也带你了解数据迁移过程中需要注意的关键点,尽量让你避免踩坑。

如何平滑地迁移数据库中的数据

你可能会认为:数据迁移无非是将数据从一个数据库拷贝到另一个数据库,可以通过 MySQL 主从同步的方式做到准实时的数据拷贝;也可以通过 mysqldump 工具将源库的数据导出再导入到新库,这有什么复杂的呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了数据迁移的重要性和复杂性,涉及数据库迁移和缓存迁移两个方面。在数据库迁移方面,作者提出了“双写”方案和级联同步方案,分别适用于不同场景的数据迁移。在缓存迁移方面,作者强调了保持缓存的热度的重要性,尤其是对于Redis缓存的迁移。文章还提出了改进版的副本组方式来迁移缓存数据,以尽量减少对专线带宽的占用。总的来说,本文提供了实用的数据迁移方案,帮助读者了解数据迁移的方法和关键考虑点。文章内容经过实战考验,对于需要进行数据迁移的读者具有一定的指导意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《高并发系统设计 40 问》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(42)

  • 最新
  • 精选
  • 约书亚
    a. @_CountingStars的问题提到“双写”方案中主从同步和双写冲突的问题,的回答是双写之前要将同步断掉。 假设我们在夜间进行操作,不考虑主从延迟过高的情况。 但是,”断掉同步“与”有双写代码的应用,被部署上线能正常执行双写“这两个操作之间,时机也不会配合特别完美吧? 如果先断掉同步,就意味着有可能从库丢掉部分数据。 如果先上线新代码,就意味着短时间内数据要么冲突,要么对于不幂等的操作,数据变成双份了? b.双写方案的一种隐患是新旧二库在遇到同一资源的并发操作时,执行顺序有可能不一样,进而结果就不一样。这种情况在实践中还要考虑么? c.另外我还疑问,现代的应用部署都是基于灰度的,在写操作的代码发生切换时(从双写到写新库,或者从写旧库到写新库),做灰度发布都会带来问题吧?

    作者回复: 双写时加开关,默认关闭双写,上线完成后关闭同步,同时打开开关,在低峰期的话数据丢失的概率不高。再配合数据校验的工作,是可以保证一致性的

    2019-10-25
    4
    31
  • mgxian
    双写方案中 由于新库配置为旧库的从库 此时双写肯定会出现数据重复的问题啊 或者 数据写入失败

    作者回复: 双写之前要将同步断掉

    2019-10-25
    4
    14
  • 星空
    老师说的方案,和我们前几个月做的方案整体上很想。不过我们的方案和场景更复杂一点,我们是系统升级。老系统为.Net+SqlServer,新系统是Java+Mysql。业务上由于是直接基于标品二次开发,所以存在新老系统的业务兼容和数据兼容,并不能简单的通过双写就解决问题。我们引入了kafka组件。和两个数据同步服务,两个服务之间商定共同认可的统一业务消息体,互相实时发送增量消息,并解析对方发送来的消息结合自己的业务入库。流量在网关层依据某个hander标识字段去分流,用apollo开关可以随时掌控切换的比例。做到随时能进能退。数据校验,对全量我们采用了业务抽检+总数校验。对增量我们才用了T+1后的增长量校验。为了验证新系统的业务准确性,还在网关层做了流量拷贝,响应对比等

    作者回复: 这就更复杂了

    2019-12-09
    12
  • 小喵喵
    老师说的迁移是指的旧库迁移到新库,新旧库的表结构基本一样。但是如果系统重构后的迁移就很难做了。我以前遇到一个大的系统,整个db里面有几千张表。重构后采用微服务的方式,原来的一个db分成了10多个db,还做了分表。有些原来旧库的表也做了拆分,合并,字段的增加、减少等。旧库表中的有些字段名字都重新命名了。这样的数据迁移都是狗血的数据迁移。整个公司组建一个数据迁移团队,包括开发,架构师,技术总监,dba,运维等几百人,数据校验也基本都是人工校验。耗几个月才完成了数据迁移。而且问题一大推。面对如何奇葩的数据迁移,老师有什么好的方案?

    作者回复: 数据的同步可以考虑解析binlog来同步 校验就真的没辙了,我之前经历的大的数据迁移都是已月为单位的

    2019-10-31
    3
    10
  • 知行合一
    老师,数据具体怎么校验呢,简单说下常用的校验方式吧,谢谢

    作者回复: 比如说从源库随机抽取一定量的数据,从新库中查询看是否一致

    2019-10-28
    8
  • 任鹏斌
    老师有个疑问,数据库的双写方案1,2步之间,切换为双写前是不是应该停掉新旧库的同步关系?

    作者回复: 是的,是要先停掉同步关系

    2019-11-05
    5
  • 数据迁移目前还没做过,不过面试时曾经被问到过,给的是双写的方案。 关键点: 1:数据校验怎么做? 2:什么时候换成读新库? 3:什么时候不再写旧库? 允许停服务,怎么都好说,不能停服务,选择的时机非常关键,那一个时刻判断出数据已经一致了,怎么判断太关键了,线上有可能做不到完全一致,需要做一些线下补偿。 怎么判断数据是否一致呢?记录条数加抽样比对,允许一定的误差,不如总有误差就永远切不了啦!然后再去线下补偿。

    作者回复: 数据校验好了就可以切新库

    2020-04-25
    3
  • Corner
    老师您好,关于双写方案有两个疑问需要请教一下。1.数据同时写入两个数据库怎么做对代码的改动比较小呢?有成熟的工具或中间件来做吗?2.新库在同步追上旧库的binlog后,在开始双写时需要断开吗?不然对于新库会有重复的数据。如果新库需要停止对旧库的binlog同步,和双写的开启时机这里怎么做协调呢?

    作者回复: 1. 还真没有,其实改动代码也简单 2. 需要断开的,可以在双写的时候加开关,断开同步时立刻打开开关

    2019-10-25
    2
    3
  • whiledoing
    想问一下老师,如果数据的迁移还伴随着领域模型的重构(库表结构差异巨大,单纯基于binlog主从同步无法达到目标,必须业务上实现数据的模型变更,存量迁移和增量同步双写),有没有一些好的实践经验。

    作者回复: 先迁移,后重构,不香吗 :) 如果一起做的话 可以基于消息来做,只是会复杂很多

    2020-04-14
    2
  • la la la
    目前正在经历的上云,物理机与云都不互通,需要跳板机一层层的跳,乱七八糟一大堆的东西,就几个人搞,太坑了。

    作者回复: 我目前也在经历上云,物理机和云的互通应该是上云的第一步吧。。

    2019-12-02
    2
    2
收起评论
显示
设置
留言
42
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部