前言互联网公司中有很多大型系统,比如商城的价格系统,优惠券系统等等。这些系统经过年复一年的运行,数据存储量会相当大。我们最终会做一些数据库升级。简单粗暴的方法就是对数据库进行裁剪,以满足更多的数据库存储空间和更好的数据的需要。读取性能。但是,对于系统来说,切数据库的操作和换血的操作没有区别。这是一个非常危险的操作,那么如何顺利的切换系统的数据库,或者损失最小呢?这就是本文要分享的内容。很多时候,如果我们能够通过优化系统来满足系统的性能需求,我们是不会选择切库的方案的。笔者经历过以下两种数据库切入:数据库中间件原来的数据库使用通过Docker安装的MySQL,切换到公司内部的数据库中间件(也叫分布式数据库,类似阿里云的RDS)。程序中的代码程序不需要做太多的分库分表转换。数据库中间件帮我们做了这些,我们的数据存储自然就变成了多分片存储;原数据库是公司内部的数据库中间件,因为分片太少,需要扩容分片。但是数据库中间件不能很好的扩缩容分片,需要在少分片数据库中间件和多分片数据库中间件之间切换;方案有上面的共识,如果最终选择分库方案,我们一般选择在夜深人静的时候,也就是系统访问量最少的时候,比如电商,一般在左右半夜3点30分,进行切库操作,避免切库过程中脏数据过多。当然,我们的系统需要提前开发数据库切分相关的代码,比如新数据库SQL适配,数据库切分过程的切换引入等等。至于从A数据库切换到B数据库的具体步骤,有以下几点:数据库切换过程1、将A数据库中的所有数据同步到B数据库中,同时保持增量同步。这样,如果我们把数据库连接从A换成B,读到的数据是一样的。当然,期间数据库同步延迟是不可避免的。数据同步可以使用阿里巴巴开源的中间件通道。2.停止编写A库。一旦A库停止写入,B库会在短暂的延迟后获得与A库相同的全量数据,然后我们就可以同步断开数据库了。3、将系统的数据库链接切换到B库。我们的系统需要提前连接两套数据库,数据库连接由一个开关控制,这样我们就可以在很短的时间内切换系统的数据库连接。
