若发现文章有误,欢迎提出宝贵的建议,敬请指教,感谢
运行环境
- Ubuntu 21.04
- Docker 20.10.7
- MySQL 5.7
一、MySQL相关概念
1.1 中继日志 relay log
-
中继日志
relay log
只在主从master/slave
服务器架构的从服务器上存在。 -
slave
为了与master
保持一致,要从master
读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,slave
本地的日志文件就叫做中继日志(relay log)
。 -
slave
读取relay log
,并根据其内容对slave
的数据进行更新,完成master
与slave
的数据同步。 -
搭建好
master/slave
之后,relay log
默认会保存在slave
的数据目录下。 -
relay log 存储文件名的格式是:
slave_name -relay-bin.序号
。 -
relay log 还有一个索引文件:
slave_name-relay-bin.index
, 用于定位当前正在使用的relay log
relay log 与 二进制日志(bin log)的格式相同,可以用mysqlbinlog
工具进行查看
1.2 主从架构 & 读写分离
1.2.1 如何提高数据库的并发能力
在实际工作中,通常使用 Redis 作为缓存与MySQL配合使用,当有请求的时候,首先会从缓存中进行查找,如果存在就直接取出,如果不存在的话再访问数据库,这样就提升了读取的效率,也减少了对后端数据库的访问压力,Redis的缓存架构是高并发架构中非常重要的一环。
此外,一般对数据库而言都是“读取多,写入少”,即数据库读取数据的压力比较大,解决思路之一就是采用数据库集群的方案,做主从架构,进行读写分离,这样同样可以提升数据库的并发处理能力。
提升数据库高并发访问的步骤,根据需求依次选择其中一种,使用和维护成本是逐渐升高的:
- 优化SQL语句和索引,这种方式简单有效。
- 采用缓存的策略,比如使用Redis将热点数据保存在内存数据库中,提升读取的效率。
- 对数据库采用主从架构,进行读写分离。
1.2.2 主从架构的三大作用
主从同步设计不仅可以提高数据库的吞吐量,还有以下3个方面的作用。
1.读写分离
可通过主从复制的方式来同步数据,然后通过读写分离提高数据库并发处理能力
其中一个为Master主库,负责写入数据,简称为:写库
其他都是Slave从库,负责读取数据,简称为:读库
如图,当Master进行更新时,会自从将数据复制到Slave中,而我们在客户端读取数据时,会从Slave中读取。
面对"读多写少"的需求,采用读写分离的方式,可以实现更高的并发访问,同时我们还能对服务器进行负载均衡,让不同的读请求按照策略均匀的分发到不同的Slave上,让读取更加流畅,读取流畅的另一个原因就是减少了锁表的影响,比如:Master负责写,当Master锁表时,不会影响到Slave进行SELECT的读取。
2.数据备份
将Master的数据复制到Slave上,相当于是一种热备份机制,即在Master正常运行的情况下进行备份,不会影响到服务
3.高可用性
数据备份实际上是一种冗余的机制,通过这种冗余的方式可