天天看点

数据库--单表转分库分表

简介

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

方案1:sharding-proxy + sharding-scaling

​其他网址​

​​ShardingJdbc分库分表实战案例解析(下)-mb5fd8692eb1f28的博客-51CTO博客​​

​简介​

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

方案2:手动操作

​其他网址​

​​现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表**动态切换**到分库分表上? - 简书​​

​​ShardingJdbc分库分表实战案例解析(下)-mb5fd8692eb1f28的博客-51CTO博客​​

​停机迁移方案​

数据库--单表转分库分表

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

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

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

        验证一下,ok了即可。

​双写迁移方案(不停机)​

数据库--单表转分库分表

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

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

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