服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL的主从复制原理详细分析

MySQL的主从复制原理详细分析

2022-07-14 13:46菜鸟~~ Mysql

这篇文章主要介绍了MySQL的主从复制原理详细分析,读写分离是基于主从复制来实现的。文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

 

前言

在实际生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是不能满足实际需求的,一般要通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力

 

一、主从复制概念

主从复制是MySQL提供的基本的技术,主从复制的流程:binlog二进制日志(除了查询其他的更改相关的操作都会记录在binlog里面)、relay log日志和三个线程(master的一个线程和slave的两个线程)。

主库(master)对外提供数据的增删改查服务,主库中涉及到数据的修改都会写在binlog从库(slave)用来数据同步和数据备份,通过专门的线程从主库里面的binlog把主库和数据、权限、表结构相关的修改同步到从库里面,相当于是在主库上做的所有修改都会通过都会通过主从复制机制体现在从库上。

主从复制的好处:数据备份,我们甚至可以给它做一个热备份,就是通过MySQL中间件mycat,可以实现容灾,容灾也体现了高可用
容灾:如果主库挂了,由中间件代理mycat自动把服务的请求映射到从库,由从库继续对外提供服务,体现出了高可用性(后端的服务允许一定的异常发生,但是后端的架构服务要可以容错,把这些异常的错误处理掉,并对外重新提供正常的服务)

 

二、读写分离的概念

读写分离是基于主从复制来实现的。在实际的应用环境中,肯定是读操作多,就像我们在电商平台上去购买东西,可能看了100个也就买了一两个。所以读操作永远比写这种更新操作多很多。所以我们基于主从复制的读写分离配置,就是让一个主库专门用来做数据的修改,写的时候专门在主库上写,主库通过主从复制把数据的更改通过binlog同步到从库上去,那么其他的客户端查询的请求都会最终映射到从库上去,而我们一个主库带上两三个从库,主库专门用来做数据的更新(写操作),从库专门用来做读操作这样一来可以很好的分摊读写的压力,不用全部都集中在主库上,对于后端服务的并发处理能力有很大的提高,另外就是它的高可用容灾,当主库挂了以后,可以把指定的从库变成主库。

MySQL的主从复制原理详细分析

上图中的binlog,即使我们没有主从复制,也是会写binlog的,只不过主从复制是通过binlog来实现的。

 

三、主库和从库

 

1. 主库

主库master服务器创建一个binlog转储线程将二进制日志内容发送到从服务器

 

2. 从库

  • 从库里面专门有一个I/O线程专门读取接收主库发送的内容,它会把主库里面发过来的binlog内容接收并写到一个relay log里面,中继日志相当于做了一个缓冲,这样 master 就不必等待 slave 执行完成才发送下一个事件。并不是把主库里面的binlog内容读过来直接就执行,这样直接执行不好的地方就是主库的binlog内容可能会很多,而从库接收到binlog内容执行起来可能会很慢,导致从库更新数据和主库差距会越来越大。数据的复制可能比较落后。
  • 从库还会启一个SQL线程,专门从中继日志读取相应的操作,所有的SQL都执行一遍,这样就实现了从库内容和主库内容的同步

 

四、主从复制的流程

主从复制的流程:两个日志(binlog二进制日志和relay log日志)和三个线程(master的一个线程和slave的两个线程)。

  • 主库的更新操作写入binlog二进制日志中(主库需要打开binlog开关)
  • master服务器创建一个binlog转储线程,将二进制日志内容发送到从服务器
  • slave机器执行START SLAVE命令会在从服务器创建一个IO线程,接收master的binary log复制到其中继日志(处于内存中,读写快)。 首先slave开始一个工作线程(I/O线程),I/O线程会主动连接master ,然后主库会开启dump线程,dump线程从master的binlog中读取事件并发送给slave的I/O线程,如果dump线程已经跟上master(主库上的dump线程已经把binlog的内容发完了,而且主库上binlog没有产生更多的内容),dump线程会睡眠并等待binlog产生新的事件,slave的I/O线程接收的事件写入中继日志
  • slave的SQL线程处理该过程的最后一步,SQL线程从relay log中读取事件,并执行其中的事件更新slave的数据,使其与master的数据同步。只要SQL线程与I/O线程保持一致,中继日志通常会位于os缓存中,所以中继日志的开销很小

 

五、主从复制效果展示

linux上的centos作为主库win10上的mysql server作为从库来演示:

MySQL的主从复制原理详细分析

主从复制是单向同步,master的更改往slave同步。配置好主从复制的时候,两个库的数据可能是不一样的,从配置好主从复制开始,主库所有的更改都会同步到从库。

master创建mytest数据库:

MySQL的主从复制原理详细分析

查看slave,发现mytest同步过来了:

MySQL的主从复制原理详细分析

master创建了user表,slave也同步了user表:

MySQL的主从复制原理详细分析

MySQL的主从复制原理详细分析

现在linux端的MySQL(master)删除mytest库

MySQL的主从复制原理详细分析

此时slave的mytest也不存在了

show processlist可以查看master当前环境下的工作线程

MySQL的主从复制原理详细分析

查看slave当前环境下的工作线程

MySQL的主从复制原理详细分析

到此这篇关于MySQL的主从复制原理详细分析的文章就介绍到这了,更多相关MySQL主从复制内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/qq_41721746/article/details/125641961

延伸 · 阅读

精彩推荐
  • MysqlMySQL 5.5主从同步设置笔记分享

    MySQL 5.5主从同步设置笔记分享

    这篇文章主要介绍了MySQL 5.5主从同步设置笔记分享,需要的朋友可以参考下 ...

    MYSQL教程网2852020-03-26
  • MysqlMySQL的从库Seconds_Behind_Master延迟总结

    MySQL的从库Seconds_Behind_Master延迟总结

    这篇文章主要介绍了MySQL的从库Seconds_Behind_Master延迟的相关资料,需要的朋友可以参考下...

    老叶茶馆_10802021-09-27
  • Mysqlalisql和mysql区别

    alisql和mysql区别

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。AliSQL是基于MySQL官方版本的一个分支,由阿里云数据库团队维护,目...

    PHP中文网13042020-04-29
  • Mysql浅谈mysql explain中key_len的计算方法

    浅谈mysql explain中key_len的计算方法

    下面小编就为大家带来一篇浅谈mysql explain中key_len的计算方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    MYSQL教程网3972020-07-24
  • Mysql实例测试MySQL的enum类型

    实例测试MySQL的enum类型

    小编给大家带来的本篇内容是关于MySQL的enum类型实例测试,通过不同的测试让大家更好的理解enum类型的用法,一起学习下。...

    MYSQL教程网2872020-08-21
  • Mysql概述MySQL统计信息

    概述MySQL统计信息

    本篇文章通过统计信息的概念介绍以及MYSQL统计信息的优势等方面全面概述了MySQL统计信息的相关知识点,有兴趣的朋友学习下。...

    老叶茶馆_4852020-08-25
  • MysqlMysql 5.7.19 免安装版遇到的坑(收藏)

    Mysql 5.7.19 免安装版遇到的坑(收藏)

    这篇文章给大家分享了mysql 5.7.19免安装版在安装过程中遇到的一些问题,以前有mysql服务的话 需要去停掉mysql服务。具体内容介绍大家参考下本文 ...

    三思再三思4962020-08-06
  • Mysqlmysql 重要日志文件汇总

    mysql 重要日志文件汇总

    这篇文章主要介绍了mysql 重要日志文件的汇总,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下...

    程序之心9762021-03-09