Mysql主从复制
binlog日志
记录所有更改的语句,可以从用于主从服务器之间的数据同步,以及服务器遇到的故障数据的无损修复
- 用于数据的恢复,如果Mysql数据库意外停止的话,可以通过二进制日志来查看用户执行了哪些操作,对数据库服务器文件做了哪些修改,然后根据二进制文件中的记录来恢复数据库服务器
- 数据的复制,由于日志的延伸性和时效性,master把二进制日志传递给slaves来达到 主从数据一致的目的
mysql的数据备份,主备,主主,主从,都离不开binlog,需要依赖binlog来同步数据,保证数据的一致性
中继日志(relay log)介绍
中继日志只在主从服务器架构的从服务器上存在,从服务器为了与主服务器保持一致,要从主服务器读取二进制binlog日志的内容,并且把读取到的信息写入到本地日志文件中,这个从服务器本地的日志文件就叫做中继日志,然后从服务器读取中继日志,并且根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据的同步,中继日志和二进制日志的格式相同
如何提高数据库的并发能力
在实际的工作中,我们常常将redis作为缓存和Mysql进行配合使用当有请求的时候,会先从reids中进行查找,如果存在就直接取出,如果不存在然后访问数据库,这样就提高了读取的效率,降低了数据库的压力,redis的缓存架构是高并发中非常重要的一环
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nRTCXKw-1651980207259)(./2022-05-07-19-10-43.png)]
此外,一般应用对于的数据库而言,都是读多写少,数据库的读取压力比较的大,因此的话,可以采用集群的方案,做主从架构,进行读写分离,这样可以提高数据库的并发处理能力,但是设计架构本身是有一定成本的,如果我们的目的在于提高数据库高并发访问的效率,应该首先考虑的是如何优化sql和索引,其次才是缓存策略,比如使用redis将热点数据保存在内存数据库当中,提高读取的效率,最后才是主从架构,读写分离
主从复制的作用
主从复制的设计不仅可以提高数据库的吞吐量,还有以下的作用
- 读写分离
我们可以通过主从复制的方式来同步数据,然后通过读写分离提高数据库的并发处理能力
其中一个是master主库,负责写数据,我们称为写库
其他的都是slave从库,负责读取数据,我们称为读库
当主库更新的时候,会自动的将数据复制到从库中,而我们在读取数据的时候,是在从库中进行读取的,在面对读多写少的需求的时候,读写分离的方式可以实现更高的并发访问,还可以对服务器进行负载均衡,让不同的请求策略均匀的发送到不同的服务器上,让读取更加的顺畅,减少了锁表的影响,主库出现写锁的时候,不会影响从库进行读取. - 数据的备份
通过主从复制将主库中的数据复制到了从库上,相当于是一种热备份机制,在主库正常的情况下进行备份,不会影响到服务 - 高可用
数据的备份就是一种冗余的机制,通过这种冗余的方式,可以换取数据库的高可用性,也就是当服务器出现故障或者宕机的时候,可以切换主从服务器,然后保证服务器的正常运行
主从复制的原理
slave 会从Master读取binlog来进行数据的同步
实际上主从复制的原理是基于binlog进行数据同步的,在主从复制的过程中,会有三个线程来操作,一个主库线程,两个从库线程
主库线程:
二进制日志转储线程
从库线程:
从库I/O线程
从库SQL线程
主从复制的步奏
- master将写操作记录到二进制日志中,传输到从服务器
- slave接收master传输的bin.log文件,将其转化为二进制的中继日志
- slave重新的读取中继日志中的事件,将其改变同步到自己的数据库中
主从复制的问题和原则
- 主从复制的最大问题是 延时
- 每个slave只有一个master
- 每个slave只能有一个唯一的服务器id
- 每个master可以有多个slave