MySQL — 主从复制介绍

文章目录

  • 主从复制
  • 一、概述
  • 二、原理
  • 三、 搭建主从复制结构
    • 3.1 服务器准备
    • 3.2 主库配置
    • 3.3 从库配置

主从复制

一、概述

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),使得从库和主库的数据保持同步。

​ 从库当中把主库的二进制日志文件同步过来并执行了,name这个时候从库的数据和主库的数据也就同步保持一致了,这个过程就称为主从复制。

MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制

主库一般称为Master, 从库一般称为Slave

image-20230531102027985

优点

  • 主库出现问题,可以快速切换到从库提供服务

  • 实现读写分离,降低主库的访问压力

    增删改的请求操作主库,查询的请求操作从库

  • 可以在从库中执行备份,以避免备份期间影响主库服务

​ 在数据备份的时候,需要加一个全局锁,避免数据不一致的情况发生

​ 添加全局锁后,其他客户端是不能执行增删改操作的(但是可以查询),显然会影响业务

​ 但是现在有了从库之后,直接在从库进行数据备份,但是主库还是可以使用的,等从库备份完成后,再将二进制文件同步到从库,又使得主库从库数据一致。

下面这篇文章介绍了执行备份时加全局锁和不加全局锁的情况:

MySQL — 锁_我爱布朗熊的博客

二、原理

主库当中的数据是怎么同步到从库之中的?

主库当中一旦发生增删改等相关操作以及执行DDL语句的时候,它会将所有的数据变更写入到一份日志 - Binlog日志(二进制日志)

在此二进制日志当中,记录了主库所有的数据变更。(比如主库执行了一个insert,他就会记录在Binlog日志当中)

image-20230531105124146

从库里面涉及到两组线程

  • IOThread

​ 会发起一个请求来连接master数据库,然后读取master数据库当中的binlog日志。

​ 当读取日志并返回后,IOThread会将Binlog日志写入到Slave自身的一份日志,这份日志叫做中继日志 Relay Log

image-20230531111310585

  • SQLThread

​ 上面的步骤完成后就该SQLThread线程出现了,主要负责读取中继日志当中的数据,把中继日志当中所记录的数据变化再反映到自身数据库的数据变化,从而保证了主从数据是一致的。

image-20230531111511574

可在下面的这篇文章中补充二进制日志知识

MySQL — 日志、错误日志、二进制日志、查询日志、慢查询日志

总结

① Master 主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中。

② 从库读取主库的二进制日志文件 Binlog ,写入到从库的中继日志 Relay Log 。

③slave重做中继日志中的事件,将改变反映它自己的数据。

三、 搭建主从复制结构

我没有两台服务器,只能学习理论了。

3.1 服务器准备

直接将防火墙关掉就好

image-20230531112048783

3.2 主库配置

主库既可以读,又可以写

  • 修改my.ini文件

    binlog-ignore-db:表示在同步的时候忽略哪个数据库

    binlog-do-db:指定同步哪个数据库

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 232-1,默认为1
server-id=1
#是否只读,1 代表只读, 0 代表读写
read-only=0
#忽略的数据, 指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01
  • 重启MySQL服务
systemctl restart mysqld
  • 登录MySQL,创建远程连接账号,并授予主从复制权限
    这个账户就是将来从库链接主库时的账号和密码
#创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务。 %表示该用户可以在任意主机上访问该服务器
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';

#为 'itcast'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';
  • 查看二进制日志坐标
show master status;

file : 从哪个日志文件开始推送日志文件

position : 从哪个位置开始推送日志

binlog_ignore_db : 指定不需要同步的数据库

image-20230531114018355

3.3 从库配置

  • 修改配置文件my.ini

    从库是只读,仅仅代表对普通用户是只读的,如果具有管理员的权限也是可以读写的,如果想让超级管理员也只读,需要再增加一条 super-read-only=1

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,和主库不一样即可
server-id=2
#是否只读,1 代表只读, 0 代表读写
read-only=1
  • 重启MySQL服务
systemctl restart mysqld
  • 登录MySQL,设置主库配置

    SOURCE_HOST:主机地址

    SOURCE_USER:对应服务器哪个用户

    SOURCE_PASSWORD:密码

    SOURCE_PASSWORD:从哪个二进制日志文件开始同步

    SOURCE_LOG_POS:从这份日志的哪个位置开始同步

CHANGE REPLICATION SOURCE TO 
  SOURCE_HOST='192.168.200.200', 
  SOURCE_USER='itcast',
  SOURCE_PASSWORD='Root@123456', 
  SOURCE_LOG_FILE='binlog.000004',
  SOURCE_LOG_POS=663;

上述是8.0.23中的语法。如果mysql是 8.0.23 之前的版本,执行如下SQL:

知识参数名不同而已

CHANGE MASTER TO 
  MASTER_HOST='192.168.200.200', 
  MASTER_USER='itcast',
  MASTER_PASSWORD='Root@123456',
  MASTER_LOG_FILE='binlog.000004',
  MASTER_LOG_POS=663;
  • 开启同步操作
start replica; #8.0.22之后
start slave; # 8.0.22之前
  • 查看主从同步状态
show replica status ; #8.0.22之后
show slave status ; #8.0.22之前

如果查询出来的数据比较乱,没有按照行展示,可以在操作命令之后加\G

show replica status\G ; #8.0.22之后
show slave status\G ; #8.0.22之前

如果下面红框的都是Yes,说明主从复制正常

IOThread用来读取二进制日志并将内容写入到中继日志的

SQLThread用来读取中继日志,并把数据反映到自身变化的

image-20230531141338500

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/25952.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1. TensorRT量化的定义及意义

前言 手写AI推出的全新TensorRT模型量化课程,链接:TensorRT下的模型量化。 课程大纲如下: 1. 量化的定义及意义 1.1 什么是量化? 定义 量化(Quantization)是指将高精度浮点数(如float32)表示为低精度整数(如int8)的过程&…

如何运用R语言进行Meta分析在【文献计量分析、贝叶斯、机器学习等】多技术的融合

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…

华为OD机试真题 Java 实现【高矮个子排队】【2023Q2 100分】,附详细解题思路

一、题目描述 现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。 我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高…

【配电网重构】基于改进二进制粒子群算法的配电网重构研究(Matlab代码实现

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

批量剪辑视频工具源码开发搭建分享

搭建步骤 1. 首先需要根据自身产品确定视频类型及需要实现的视频效果 2. 根据预期视频效果选择视频上传模式,并将视频素材进行上传 3. 添加音频、字幕,标题等与素材进行组合。 4. 设置投放计划,包括:视频标题、视频话题等 5.…

dom阶段实战内容

window定时器方法 ◼ 目前有两种方式可以实现:  setTimeout 允许我们将函数推迟到一段时间间隔之后再执行。  setInterval 允许我们重复运行一个函数,从一段时间间隔之后开始运行,之后以该时间间隔连续重复运行该函数。 ◼ 并且通常情况…

周赛347(模拟、思维题、动态规划+优化)

文章目录 周赛347[2710. 移除字符串中的尾随零](https://leetcode.cn/problems/remove-trailing-zeros-from-a-string/)模拟 [2711. 对角线上不同值的数量差](https://leetcode.cn/problems/difference-of-number-of-distinct-values-on-diagonals/)模拟 [2712. 使所有字符相等…

什么是分布式事务?

什么是分布式事务? 分布式对应的是单体架构,互联网早起单体架构是非常流行的,好像是一个家族企业,大家在一个家里劳作,单体架构如下图: 但是随着业务的复杂度提高,大家族人手不够,…

如何使用 Python Nornir 实现基于 CLI 的网络自动化?

在现代网络环境中,网络自动化已成为管理和配置网络设备的重要工具。Python Nornir 是一个强大的自动化框架,它提供了一个简单而灵活的方式来执行网络自动化任务。本文将详细介绍如何使用 Python Nornir 实现基于 CLI 的网络自动化。 1. Python Nornir 概…

view的常用属性和方法介绍(arcgis for javascript)

ArcGIS for JavaScript中的视图(view)是一个地图实例类,用于管理地图的显示区域、符号和标注等。通过视图类,可以实现以下功能: 显示地图:将地图显示在Web页面上。 缩放:缩放视图到指定的级别。…

SpringBoot 配置文件和日志文件

目录 一、SpringBoot配置文件 配置文件的格式 .properties配置文件格式 .yml配置文件格式 .properties 与 .yml的区别 配置文件的读取 .properties 与 .yml的区别 设置不同环境的配置⽂件 二、SpringBoot日志文件 日志打印的步骤 得到日志对象 方法一:使…

【网络】- 计算机网络体系结构 - OSI七层模型、TCP/IP四层(五层)协议

目录 一、概述 二、计算机网络体系结构的形成  👉2.1 分层的网络体系结构  👉2.2 OSI 参考模型  👉2.3 TCP/IP - 事实的国际标准 三、OSI 参考模型 四、TCP/IP 协议 一、概述 但凡学习计算机网络知识,肯定绕不过网络协议的&…

SpringMVC拦截器

SpringMVC拦截器 介绍 拦截器(interceptor)的作用 SpringMVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器 进行预处理和后处理 将拦截器按一定的顺序连接成一条链,这条链称为拦截器链(Interception Ch…

hive中如何计算字符串中表达式

比如 select 1(2-3)(-4.1-3.1)-(4-3)-(-3.34.3)-1 col ,1(2-3)(-4.1-3.1)-(4-3)-(-3.34.3)-1 result \ 现在的需求式 给你一个字符串如上述col 你要算出result。 前提式 只有和-的运算,而且只有嵌套一次 -(4-3)没有 -(-4(3-(31)))嵌套多次。 第一步我们需要将运…

【学习笔记】Python核心技术与实战-基础篇-03列表和元组,到底用哪个?

目录 列表和元组基础概念区别列表和元组的基础操作和注意事项列表和元组存储方式的差异列表和元组的性能列表和元组的使用场景总结思考题 列表和元组基础 概念 列表和元组,都是一个可以放置任意数据类型的有序集合。 在绝大多数编程语言中,集合的数据类…

js数据类型和六种运算结果为false的情况

数据类型 number:数字(整数、小数、NaN(Not a Number)) string:字符串、单双引皆可 boolean:布尔。true、false null:对象为空 undefined:当声明的变量初始化时,该变量的默认值…

JPEG压缩基本原理

JPEG算法的第一步是将图像分割成8X8的小块。 在计算机中,彩色图像最常见的表示方法是RGB格式,通过R(Red)、G(Green)A和(Blue)组合出各种颜色。 除此以外,还有一种表示彩色图像的方法,称为YUV格式。Y表示亮度,U和V表示…

Spring第三方bean管理

文章目录 1.第三方bean管理1.1 Bean1.2 小结 2.第三方bean依赖注入2.1 简单类型:成员变量2.2 引用类型:方法形参2.3 小结 3.总结 1.第三方bean管理 1.1 Bean 首先看一下目录结构,APP里面就初始化了SpringConfig文件 SpringConifg中就一句话…

C++11中的智能指针unique_ptr、shared_ptr和weak_ptr详解

目录 1、引言 2、什么是智能指针? 3、在Visual Studio中查看智能指针的源码实现 4、独占式指针unique_ptr 4.1、查看unique_ptr的源码实现片段 4.2、为什么unique_ptr的拷贝构造函数和复制函数被delete了?(面试题) 4.3、使…

Java网络开发(Tomcat)—— Servlet学习 Web相关背景知识 JavaWeb项目初步

本文目录 引出〇、域名、IP、端口一、软件架构BS和CS二、实现Web服务的条件和步骤三、Tomcat搭建Web项目初步1.pom.xml文件配置2.web.xml文件更新3.Tomcat运行环境配置4.项目文件层级解析 四、JavaWeb项目文件分类(1)静态文件—存放位置(2&am…