小编的话
在文章的开始作者为大家整理了很多资料!包括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