自学内容网 自学内容网

四、Sharding-JDBC系列04:分库分表后,如何不停机迁移数据?

目录

停机迁移方案

双写迁移方案


一般会有两种方案:

停机迁移方案

这种方案最简单也是最low的。

数据迁移前,在网站或者app挂个公告,说0点到早上6点系统进行维护,无法访问。

接着到0点停机,系统停掉,就没有流量写入了,此时老的单库单表就不会有新数据写入了。然后你用提前写好迁移数据的工具,将单库单表的数据哗哗哗读出来,写到分库分表里面去。

迁移完了之后,修改系统的数据库连接配置啥的,包括可能代码和SQL也许有修改,那你就用最新的代码,然后直接启动连到新的分库分表上去。

这些工作做完之后,验证一下系统,如果没什么问题, 整个迁移工作就结束了。

停机迁移数据,其主要缺点是必须停机几个小时,而且如果一旦迁移没成功,必须切回原来的单库单表方案,下次还得发公告再次停机迁移数据。

有的项目一旦上线就不能停止运行,那么上面的方案就无法实行了。而且现在比较主流的迁移方案是不停机双写迁移方案。所以下面我们介绍下双写迁移方案,在不停机的情况完成系统的无缝切换。

双写迁移方案

简单来说,就是在线上系统里面,之前所有对数据库增删改的操作,除了对老库增删改,都加上对新库的增删改,这就是所谓的双写。

然后新系统部署上线后,用数据迁移工具,读老库数据写到新库。如果读出来的数据在新库里没有,或者这条数据的update_time最后修改的时间,比新库的数据新才会写。简单来说,就是不允许用老数据覆盖新数据。

导完一轮之后,有可能数据还是存在不一致,那么就程序自动做一轮校验,对比新老库每个表的每条数据,如果有不一样的,就针对那些不一样的,从老库读数据再次写。

这样反复的跑了几天之后,旧数据库和新的数据库肯定是会一模一样的,最后观察下数据正常了,就可以停掉旧库的写入动作了。


原文地址:https://blog.csdn.net/Weixiaohuai/article/details/135620250

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!