MySQL 主从复制原理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 主从复制原理

MySQL 主从复制原理



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

主从复制概念

主库对外提供数据的增删改查服务,主库中涉及到数据的修改都会写binlog

从库用来数据的同步和备份,从库通过专门的线程从主库里面的binlog(二进制日志),把主库里跟数据、权限、表结构相关的修改同步到从库里面,相当于就是主库的所有修改通过主从复制机制体现在从库上

好处是做数据备份以后,通过MySQL中间件mycat,可以实现容灾

容灾:如果主库挂了,由中间件代理mycat自动把服务的请求映射到从库,由从库继续对外提供服务,体现出了 高可用性(后端的服务允许一定的异常发生,但是后端的架构服务要可以容错,把这些异常的错误处理掉,并对外重新提供正常的服务)

读写分离概念

可以支持更大的并发,提高后端并发能力和高可用容灾,基于主从复制技术实现。我们读操作多,写操作少,主库专门处理写请求,数据的更新会记录在binlog,然后通过binlog同步到从库,客户端读数据的请求最终会转发到从库上(一主多从)

image.png

上图中的binlog,即使没有主从复制,也会写binlog,只不过主从复制就是通过binlog来复制的

主库介绍

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

从库介绍

从库专门有一个I/O线程,专门读取接收主库发过来的binlog的内容,并写到中继日志relay log,中继日志充当缓冲区,并不是把主库的binlog读过来直接执行,这样 master 就不必等待 slave 执行完成才发送下一个事件

relay log的作用:  主库的binlog的内容可能很多,而从库接收到binlog的内容,然后再执行,再去接收binlog的内容,会比较慢。可以把binlog的内容写入relay log,作为缓冲区,等待SQL线程逐条执行。这样SQL线程就不用和dump线程进行读写同步了

从库还会启一个SQL线程,专门从中继日志读取相应的操作,所有的SQL都执行一遍,这样就实现了从库内容和主库内容的同步

主从复制流程

两个log:binlog(master)、relay log(slave),三个thread:dump(master)、IO(slave)、SQL(slave)

  1. 主库的更新操作写入binlog二进制日志中(主库需要打开binlog开关)
  2. master服务器创建一个binlog转储线程,将binlog内容发送到从服务器
  3. 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线程接收的事件写入中继日志
  4. slave的SQL线程处理该过程的最后一步,SQL线程从relay log中读取事件,并执行其中的事件更新slave的数据,使其与master的数据同步。只要SQL线程与I/O线程保持一致,中继日志通常会位于os缓存中,所以中继日志的开销很小

主从复制效果展示

我们把linux作为一个主库,Win10上的MySQL Server作为从库

image.png

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

master创建mytest数据库

image.png

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

image.png

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

image.png

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

image.png

此时slave的mytest也不存在了

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


show processlist

image.png

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

image.png


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
SQL 关系型数据库 MySQL
MySQL主从复制
MySQL主从复制
38 0
|
3天前
|
关系型数据库 MySQL Java
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
MySQL的主从复制 && SpringBoot整合Sharding-JDBC解决读写分离
39 0
|
3天前
|
SQL 关系型数据库 MySQL
Mysql 的binlog日志的原理【4月更文挑战第1天】
【4月更文挑战第1天】 MySQL的binlog(二进制日志)是一个记录数据库更改的日志文件,它主要用于复制和恢复操作。以下是binlog日志的工作原理的简要概述: **事件写入**:当MySQL服务器执行一个事务时,它会将该事务中所有对数据库的修改操作(如INSERT、UPDATE和DELETE等)记录为一个事件(event)。这些事件包含了修改操作的相关信息,如操作类型、涉及的表、修改的行等。
|
3天前
|
SQL 关系型数据库 MySQL
MySQL中主从复制的原理和配置命令
要原因包括提高性能、实现高可用性、数据备份和灾难恢复。了解两大线程( I/O 和 SQL)I/O线程:目的:I/O线程主要负责与MySQL服务器之外的其他MySQL服务器进行通信,以便复制(replication)数据。 功能: 当一个MySQL服务器作为主服务器(master)时,I/O线程会将变更日志(binary log)中的事件传输给从服务器(slave)。从服务器上的I/O线程负责接收主服务器的二进制日志,并将这些事件写入本地的中继日志(relay log)。 配置: 在MySQL配置文件中,你可以通过配置参数如和来启用二进制日志和指定服务器ID。log-bin server
MySQL中主从复制的原理和配置命令
|
3天前
|
负载均衡 容灾 关系型数据库
mysql主从复制
mysql主从复制
45 1
|
3天前
|
存储 SQL 关系型数据库
【MySQL】主从同步原理、分库分表
【MySQL】主从同步原理、分库分表
10 0
|
3天前
|
存储 算法 关系型数据库
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
MySQL连接的原理⭐️4种优化连接的手段性能提升240%🚀
|
3天前
|
SQL canal 运维
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
|
3天前
|
SQL 存储 关系型数据库
MySQL查询原理,看这一篇就够了!
MySQL查询原理,看这一篇就够了!
|
3天前
|
运维 负载均衡 关系型数据库
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构

推荐镜像

更多