大厂都在用的MySQL主从复制、读写分离及高可用方案

本文介绍了MySQL从单机到集群的演变,重点讲解了主从复制的原理、优缺点,包括ROW和Statement两种binlog格式、异步和半同步复制。还探讨了主从延迟问题及解决方案,如分库分表、并行复制等。同时,文章提到了高可用性方案,如MHA、MGR、MySQL Cluster和Orchestrator,以及读写分离的实现和应用配合。
摘要由CSDN通过智能技术生成

小编的话

在文章的开始作者为大家整理了很多资料!包括java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书等等!

资料都是免费分享给大家的,大家点这里直接去下载就好了,下载码:csdn

单机 =》集群

随着数据量的增大,读写并发的增加,系统可用性要求的提升,单机 MySQL 出现危机:

  • 容量问题,难以扩容,考虑数据库拆分、分库分表
  • 读写压力,QPS 过大,特别是分析类需求会影响到业务事务,考虑多机集群、主从复制
  • 高可用性不足,易宕机,考虑故障转移、MHA/MGR/Orchestrator
  • 高峰时数据库连接数经常超过上限

一致性问题,考虑分布式事务,X/A 柔性事务

读写分离的实现是基于主从复制架构:一主多从,只写主库,主库会自动将数据同步到从库。

为什么要读写分离?

高并发场景下MySQL的一种优化方案,依靠主从复制使得MySQL实现了数据复制为多份,增强了抵抗 高并发读请求的能力,提升了MySQL查询性能同时,也提升了数据的安全性。当某一个MySQL节点,无论是主库还是从库故障时,还有其他的节点中存储着全量数据,保证数据不会丢失。

主库将变更写binlog日志,然后从库连接到主库后,从库有个I/O线程,将主库的binlog日志拷贝到本地,写入一个中继日志。
接着从库中有一个SQL线程会从中继日志读取binlog,然后执行binlog日志中的内容。即在本地再次执行一遍SQL,确保跟主库的数据相同。

2 MySQL主从复制

2.1 发展史

2000年,MySQL 3.23.15版本引入了复制
2002年,MySQL 4.0.2版本分离 IO 和 SQL 线程,引入了 relay log
2010年,MySQL 5.5版本引入半同步复制
2016年,MySQL 在5.7.17中引入 InnoDB Group Replication

2.2 核心

  • 主库写 binlog
  • 从库 relay log

binlog格式

  • ROW
    记录详细但日志量会比较大
  • Statement
    只是记录SQL,记录简单
    没有查询语句
  • Mixed
# 查看binlog
mysqlbinlog -vv mysql-bin.000005

异步复制

异步复制:经典的主从复制,Primary-Secondary Replication,2000年MySQL 3.23.15版本引入 Replication。

传统的MySQL复制提供了一种简单的主从复制方案。有一个主(source)并且有一或多个从(replicas)。主数据库execute事务,将其commit,然后将它们稍后(异步)发送给从数据库,以re-executed(在基于语句的复制中)或apply(在基于行的复制中)。它是一个无共享系统,默认情况下所有服务器都具有数据的完整副本。

  • MySQL Asynchronous Replication

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值