所有分类
  • 所有分类
  • 未分类

数据库-单表转分库分表

简介

本文介绍数据库如何将单表转分库分表。

方案1:sharding-proxy + sharding-scaling

简介

本方案比较主流,推荐使用。后期会将相关内容写进来。

方案2:手动操作

停机迁移方案

大家伙儿凌晨 12 点开始运维,网站或者 app 挂个公告,说 0 点到早上 6 点进行运维,无法访问。

接着到 0 点停机,系统停掉,没有流量写入了,此时老的单库单表数据库静止了。然后你之前得写好一个导数的一次性工具,此时直接跑起来,然后将单库单表的数据哗哗哗读出来,写到分库分表里面去。

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

验证一下,ok了即可。

双写迁移方案(不停机)

常用的一种迁移方案,比较靠谱一些,不用停机,不用看凌晨 4 点的风景。

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

然后系统部署之后,新库数据差太远,用之前说的导数据工具,跑起来读老库数据写新库,写的时候要根据 gmt_modified 这类字段判断这条数据最后修改的时间,除非是读出来的数据在新库里没有,或者是比新库的数据新才会写。简单来说,就是不允许用老数据覆盖新数据。

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

接着当数据完全一致了,就 ok 了,基于仅仅使用分库分表的最新代码,重新部署一次,不就仅仅基于分库分表在操作了么,还没有几个小时的停机时间,很稳。 ​

0

评论6

请先

  1. 双写的话,数据库方面的代码要大量改了哦,而且最后对比的时候数据不一致,万一新库数据是最新的数据不就行了相当于回退了么
    150003 2024-04-25 0
    • 各有利弊
      自学精灵 2024-04-25 0
  2. 手动操作--停机迁移 系统指定时间停机==>历史数据写入分库(独立服务多节点多线程操作)==>更改系统数据库相关配置==>验证 手动操作--不停机迁移(双写迁移) 新库老库存量数据同步==>业务数据双写入新库老库==>切读/切写(逐步放大流量至新库)
    秋风扫落叶 2023-07-20 0
    • 总结的不错
      自学精灵 2023-07-20 0
  3. 方案一啥时候写进来呀
    秋风扫落叶 2023-07-20 1
    • 方案一需要一大段的时间写demo,这个有时间时进行完善吧。目前还没时间完善~
      自学精灵 2023-07-20 1
显示验证码
没有账号?注册  忘记密码?

社交账号快速登录