线上单体数据库动态切换成分库分表实现方案
场景说明
线上现在又一个单库单表的系统,在线上跑,假设表中有600万的数据,此时在本地已经部署好了三天服务器,并且通过数据读取系统将所有的数据已经迁移到本地数据库,需要将线上的单库系统切换到分库系统
方案一 :停机迁移方案
这个方案是最low的方案,再系统上发布一个停机公告,然后定时迁移
方案二: 不停机的双写方案
双写迁移方案
这个是我们常用的一种迁移方案,比较靠谱一些,不需要停机
简单来说,就是在线上系统里面,之前所有写库的地方,增删改操作,都除了对老库的增删改,都加上对新库的增删改,这就是所谓的双写,同时写两个库,老库和新库
然后系统部署之后,新库数据差太远,用之前说的导数工具,跑起来读老库的数据写入辛苦,系得手要根据gmt_modified这类的字段判断这条数据最后修改的时间,除非是读出来的数据再新库里没有,或者是比新库的数据新才会写
接着导完一轮之后,有可能数据还是存在不一致,那么就程序自动做一次校验,比对新老库的每个表的每条数据,接着如果有不一致的,就针对那些不一致的数据,从老库中读数据再次写,反复循环,直到两个标的数据都完全一致为止
接着当数据完全一致了,就ok,基于仅仅使用分库分表的最新代码,重新部署一次,就可以完成项目的数据库切换迁移,同时还不需要有几个小时的停机时间,很稳