0

0

MySQL的主从复制原理是什么

WBOY

WBOY

发布时间:2023-05-29 21:19:42

|

7466人浏览过

|

来源于亿速云

转载

前言

在实际生产环境中,如果对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的主从复制原理是什么

关于Objective
关于Objective

本文档主要讲述的是关于Objective-C手动内存管理的规则;在ios开发中Objective-C 增加了一些新的东西,包括属性和垃圾回收。那么,我们在学习Objective-C之前,最好应该先了解,从前是什么样的,为什么Objective-C 要增加这些支持。有需要的朋友可以下载看看

下载

主从复制是单向同步,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的主从复制原理是什么

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.7万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 791人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号