由于blog各种垃圾评论太多,而且本人审核评论周期较长,所以懒得管理评论了,就把评论功能关闭,有问题可以直接qq骚扰我

更换数据库数据无缝迁移方案

数据库 西门飞冰 1105℃
[隐藏]

1.介绍

在很多场景下,需要去换数据的存储介质,比如需要把mysql的数据换到ES存储,或者是吧Mongodb数据换到 Mysql存储,基本上每个运维都会碰到这种存储迁移的情况。

因为是异构数据库迁移,在生产环境可以申请到维护窗口进行迁移还好,要是不能停业务,需要平滑无缝的迁移应该怎么做呢?

2.时效性数据

时效性数据:就是指数据存在过期时间或者指定的查询范围的数据,指定时间过后就无法从用户侧查询的数据。

实效性数据迁移比较简单:比如我原来的存储用的是Mysql,现在需要吧这部分数据迁移到ES

迁移执行流程:

1、业务侧在某个时间上线双写功能,数据同时写入到Mysql和ES集群

2、比如时效性数据是30天,那么30天以后,原来Mysql的数据就是无效数据了,Mysql和ES都拥有了最新数据

3、这种情况下,查询相关数据的应用,可以随时切换读请求到ES集群

4、所有读请求切换到ES集群之后,业务关闭双写,并下线原Mysql数据

3.永久性数据

永久性数据:永远不会过期的数据,比如用户姓名,性别等。

永久性数据迁移是比较困难的:比如我原来存储用的是Mysql,现在需要迁移部分永久性数据到ES

迁移执行流程:

1、业务在某个时间上线双写功能,数据同时写入到Mysql和MQ

2、把一个Mysql的从库拿下来,自己写程序遍历Mysql的历史数据,将历史数据同步到ES

3、假设Mysql从库同步数据截止的编号是1000,那么就需要写一个MQ 消费者程序在消费到1001数据的时候,开始写入数据到ES,进行数据的回放。

4、MQ 数据消费完之后,Mysql和ES的数据就一致了

5、这个时候业务读请求就可以切换到ES了

6、读请求都切换到ES之后,写数据的程序就可以关闭双写直接把数据写入到ES

7、确定MQ没有未被消费数据之后,就可以下线MQ和消费者程序了,整个迁移过程中可以保证不丢失数据。

 

转载请注明:西门飞冰的博客 » 更换数据库数据无缝迁移方案

喜欢 (1)or分享 (0)