为什么要分库分表,分库分表的实践请看之前的文章:微服务-分库分表思路
分库分表之前我们首先要选出分片字段、然后根据一定的分片算法将数据写入不同的库表,查询数据的时候根据分片字段+分片算法从对应的库表中拿取数据即可
因此,由单独进行横向拆分后需要将老数据按照我们定义的,分片字段和分片算法重新洗数据,那么我们本节主要讲解3中方法:停机数据迁移、新老库双写、写老库通过binlog同步新库
一、上线前停服数据迁移
实践思路:
- 新建线上新库(按照分片键+分片算法新建)
- 编写数据同步程序(查询老库,然后按照分片算法迁移到新库)
- 在数据访问最少的时间段(比如半夜2点)停服务、开始跑我们的同步程序
- 数据同步完成后(要进行数据一致性校验,比如校验总数)上新代码,连接新库
优点:
- 数据一致性能得到保障
- 简单,没什么技术含量
缺点:
- 需要停服务(如果不停服务可能导致已经同步的数据在同步过程中有变更,导致数据不一致)
- 数据同步时间较长,出错率高
- 熬夜
题外话:最后一步一定要做数据校验,如果停服务的话一般校验数据总条数即可,如果同步过程中出现错误,一定要记录,否则数据矫正略麻烦;如果真的出现数据不一致的情况,提供一直校验思路:
同样的查询条件分表查询新老库,分别MD5,然后做对比
二、新老库双写
上一种为什么要停服务:就是怕在迁移过程中,有数据修改出现数据不一致的情况,那么为了解决数据不一致的情况我们可以在迁移过程中写的数据,同时写入新老库

最低0.47元/天 解锁文章
2407

被折叠的 条评论
为什么被折叠?



