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和消费者程序了,整个迁移过程中可以保证不丢失数据。