「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战
就说白了,MySQL 的主从同步到底解决了什么样的一个问题。这道面试题啊并不难,其实经历过主从复制的都应该知道它为了什么。比如读写分离,分库分表,都是我们主动同步要解决一个关键点。但是面试中如果问到了,你要给他一套理论知识或者详细的一个文字描述,需要详细剖析解析啊。
主从同步问题
在业务复杂系统中,有这么一个场景,有一条 SQL 语句需要锁表,导致是暂时不能使用读的服务,那么就很影响运行中的业务了。使用主从复制,让主库负责写,存库负责读,这样即使出现了锁表的情况,读从库也可以读取我们正常的一个业务数据。在我们项目初期,业务比较简单或数量比较少的时候,你用单台的一台 MySQL 可以保证我们的服务或者数据响应了。但是如果你的业务量比较大,你的并发量比较大的时候,你一台数据库肯定保证不了的。因此在后面的时候可能会有多台 MySQL 服务器。这个时候你要考虑一件事儿,我再进行多台 MySQL 存储的时候,每个数据库里面我必须要保证都可以被外部访问到,同时访问每一个数据库对于用户而言应该是透明的。比如数据必须要保持一致,所以我们可以怎么做?比如我让前两台你来负责写业务,后两台用来负责读业务,这是不是就没问题了?因此在这种应用场景里面,我们必须要保证每一台数据库里面的数据必须是一致同步的,那这个时候就需要主从同步问题了。
数据的热备
做数据的热备怎么理解,其实也很简单,除了主从外,还有一种叫什么叫主备。什么是主备呢?也很好理解,我现在有一台数据库,刚开始一直用着非常没问题。假如有一天你们的运营部也好,还是营销部也好,它发布了一个活动,导致你们当前这个产品卖爆,同时导致你当前网站也好,这跟系统也好,你的访问量激增,原来可能访问 10 个访问量,现在是 10000 个访问量,都去请求一台 MySQL 的话,很容易把当前这台 MySQL 给压垮了,你数据库崩了,你项目不能访问了,同时你不可能保证你当前的业务暂停。因此在这种情况下怎么办?我们可以给他做一个主备。备份什么意思?一般情况下,这台备机是不参与整个业务系统的,但是当你主机这台或者说宕机了,这时候立马从主机切换到备机里面去,保证我能够对它正常提供业务访问的一个功能。等到把主机修复好了之后,可以再切换到主机,也可以接着用我们的备机。这个时候当备机提供或者说当备机参与整个业务需求的时候,备机变成了主机,也就保证我们的业务系统能够正常的被外部访问,所以这是主备存在的一个意义。
架构的扩展
业务量越来越大,IO 法访问频率过高,单机无法满足。此时需要做多库的存储,降低访问磁盘 IO 磁盘一个频率,提高单机 IO 的性能。怎么理解,单台数据库它肯定是有具体的一个瓶颈的,比如我们经常说一句话,如果你现在用数据库 MySQL 来存储你的数据,当一个表里面的数据规模超过千万级别的时候,你就必须要做分库分表操作了。假如说表里面从一到一千万,这个时候你在进行数据检索的时候,效率非常低,把当前这个数据库拆分成五台数据库。第一台数据库放的数据从第一条到第两百万条,这样一次存储在这五台数据库中,保证你的数据均匀地散列在不同服务器里面。这个时候当你在查询请求的时候,是不是查询某个范围数据的时候,我去具体的某台数据库里面读取就可以了,而不会把所有的请求都压到一台上面,保证我们能对外持续提。