数据迁移以及扩容

Posted by Clear Blog on December 12, 2018

数据迁移

  1. 停机迁移 在没有流量写入的情况下,后台起一个程序将原库中的数据按照新的路由规则写入到新的库中。

  2. 双写 简单来说,就是在线上系统里面,之前所有写库的地方,增删改操作, 除了对老库增删改,都加上对新库的增删改,这就是所谓的双写,同时写俩库,老库和新库。 另外一个有分库分表规则的服务去跑原库中的数据,先去判断当前获取到的数据在新库中是否存在, 不存在就直接插入,否则比较两条数据的updateTime,避免老数据覆盖新的数据。

导完一轮之后,有可能数据还是存在不一致,那么就程序自动做一轮校验, 比对新老库每个表的每条数据,接着如果有不一样的,就针对那些不一样的, 从老库读数据再次写。反复循环,直到两个库每个表的数据都完全一致为止。

扩容或者缩容

一个实践是利用 32 * 32 来分库分表,即分为 32 个库,每个库里一个表分为 32 张表。 一共就是 1024 张表。根据某个 id 先根据 32 取模路由到库,再根据 32 取模路由到库里的表。

  1. 设定好几台数据库服务器,每台服务器上几个库,每个库多少个表,推荐是 32库 * 32表,对于大部分公司来说,可能几年都够了。
  2. 路由的规则,orderId % 32 = 库,orderId / 32 % 32 = 表
  3. 扩容的时候,申请增加更多的数据库服务器,装好 mysql,呈倍数扩容,4 台服务器,扩到 8 台服务器,再到 16 台服务器。
  4. 由 dba 负责将原先数据库服务器的库,迁移到新的数据库服务器上去,库迁移是有一些便捷的工具的。
  5. 我们这边就是修改一下配置,调整迁移的库所在数据库服务器的地址。
  6. 重新发布系统,上线,原先的路由规则变都不用变,直接可以基于 n 倍的数据库服务器的资源,继续进行线上系统的提供服务。