如何平滑地迁移数据库中的数据:
“双写”方案:
1)将新的库配置为源库的从库用来同步数据;如果需要将数据同步到多库多表,那么可以使用一些第三 方工具获取 Binlog 的增量日志(比如开源工具 Canal),在获取增量日志之后就可以按照分库分表的逻 辑写入到新的库表中了。
2)同时我们需要改造业务代码,在数据写入的时候不仅要写入旧库也要写入新库。当然,基于性能的考 虑,我们可以异步地写入新库,只要保证旧库写入成功即可。但是我们需要注意的是,需要将写入新库失败 的数据记录在单独的日志中,这样方便后续对这些数据补写,保证新库和旧库的数据一致性。
3)然后我们就可以开始校验数据了。由于数据库中数据量很大,做全量的数据校验不太现实。你可以抽 取部分数据,具体数据量依据总体数据量而定,只要保证这些数据是一致的就可以。
4)如果一切顺利,我们就可以将读流量切换到新库了。由于担心一次切换全量读流量可能会对系统产生 未知的影响,所以这里最好采用灰度的方式来切换,比如开始切换 10% 的流量,如果没有问题再切换到 50% 的流量,最后再切换到 100%。
5)由于有双写的存在,所以在切换的过程中出现任何的问题都可以将读写流量随时切换到旧库去,保障 系统的性能。
6)在观察了几天发现数据的迁移没有问题之后,就可以将数据库的双写改造成只写新库,数据的迁移也 就完成了。
级联同步方案:
1)先将新库配置为旧库的从库,用作数据同步;
2)再将一个备库配置为新库的从库,用作数据的备份;
3)等到三个库的写入一致后,将数据库的读流量切换到新库;
4)然后暂停应用的写入,将业务的写入流量切换到新库(由于这里需要暂停应用的写入,所以需要安排 在业务的低峰期)。
数据迁移时如何预热缓存:
改造副本组方案预热缓存
此文章为5月Day20学习笔记,内容来源于极客时间《高并发系统设计 40 问》