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