美文网首页mysql系列
不停机数据迁移方案

不停机数据迁移方案

作者: tuser | 来源:发表于2020-08-21 20:55 被阅读0次

    序言

    在微服务流行的当下,相信很多人遇到过老系统服务化的情况。服务的拆分也会涉及到数据存储的拆分,这就需要把原数据库的数据同步到新库。本文会介绍一种主流的不停机数据迁移的思路。

    数据双写

    数据迁移-数据双写方案.jpg

    原service A访问DB A的表a,现在要把涉及到表a的业务拆成Service B。不停机双写方案如下:

    1. service A改造服务,关于a的写(CUD)请求,同时同步给服务B。这是双写的由来。读请求还是走旧表。这里需要实现一个动态开关,控制数据的请求流向。
      • CREATE 新旧表都没有数据,所以不会有问题,注意这里同步时要带旧表主键。
      • DELETE 新表有数据旧表没有,旧表数据删除失败
      • UPDATE相当于DELETE+CREATE
    2. 全量同步老表的数据到新表,出现主键冲突,以旧表数据为准。
    3. 循环执行数据校验脚本,发现数据不一致, 以旧表数据为准,覆盖新表数据。这一步要一行一行的比对步骤1开始之后变动的数据。
      • 旧表有,新表也有,但是不一致。以旧表数据为准。
      • 旧表有,新表没有,插入新表。
      • 旧表没有,新表有, 删除新表。

    4.数据校验不再有不一致数据时,把service A对旧表的访问切换到访问service B。不停机迁移完成

    有读者可能会说以旧表为准,可能会导致旧数据覆盖新数据。确实存在这种情况,不过我们的数据校验脚本会一直执行,直到检查不到不一致数据为止,所以 数据最终会一致,而且一致前还是旧库提供服务,所以无伤大雅。

    相关文章

      网友评论

        本文标题:不停机数据迁移方案

        本文链接:https://www.haomeiwen.com/subject/ohwujktx.html