MySQL — 主从复制介绍

news2025/1/11 20:51:26

文章目录

  • 主从复制
  • 一、概述
  • 二、原理
  • 三、 搭建主从复制结构
    • 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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

16-Vue3中常用的 Composition API

目录 1、什么是组合式 API?2、拉开序幕的setup3、ref函数4、reactive函数5、Vue3.0中的响应式原理5.1 vue2.x的响应式5.2 Vue3.0的响应式 6、reactive对比ref7、setup的两个注意点8、计算属性与监视8.1 computed函数8.2 watch函数8.3 watchEffect函数 9、 生命周期1…

chatgpt赋能python:用Python编写AI:从入门到精通

用Python编写AI:从入门到精通 人工智能(AI)一直是计算机科学领域的热门话题。随着AI技术的成熟,越来越多的公司开始在其业务中应用AI。Python是机器学习和人工智能领域最流行的编程语言之一,Python提供了众多强大的库…

探索C++与Live555实现RTSP服务器的艺术

探索C与Live555实现RTSP服务器的艺术 一、引言(Introduction)1.1 RTSP服务器的重要性(Importance of RTSP Server)1.2 C与Live555库的优势(Advantages of C and Live555)1.3 可能用到的类和接口介绍 二、C与…

LLM时代,探索式数据分析的升级之路有哪些新助攻?

在这个信息爆炸的时代,数据已经成为我们生活、工作中不可或缺的重要资源。大量的数据犹如一座座金矿,蕴藏着无尽的价值。然而,如果无法从数据中提取出知识和信息并加以有效利用,那么数据本身并不能驱动和引领技术应用取得成功。如…

Java程序设计入门教程 -- 一维数组

目录 一维数组创建 1.声明数组 2.分配数组内存空间 3.数组元素访问 数组初始化 1.静态初始化 2.动态初始化 一维数组的拷贝 1.数组元素的拷贝 2.数组名的拷贝 一维数组创建 1.声明数组 声明一个一维数组的方法很简单,格式如下: 数据类型名[ ] …

解决使用json配置文件删除k8s中namespace解析json报错的问题

报错提示如下: C:\Users\jiangcheng>curl -k -H "Content-Type: application/json" -X PUT --data-binary dev.json http://127.0.0.1:8081/api/v1/namespaces/dev/finalize { "kind": "Status", "apiVersion": "…

Unity2D骨骼动画制作之单张图片编辑

1、打开骨骼制作面板 在Sprite Editor左侧选项,选择Skinning Editor 2、 (1)骨骼制作 Preview Pose 预览模式,可以预览动作并不会真正的改变设置 Reset Pose 将角色骨骼和关节恢复到原始位置 Edit Bone 编辑骨骼,…

bert中文文本摘要代码(3)

bert中文文本摘要代码 写在最前面关于BERT使用transformers库进行微调 train.py自定义参数迭代训练验证评估更新损失绘图主函数 test.pytop_k或top_p采样sample_generate函数generate_file函数主函数 写在最前面 熟悉bert+文本摘要的下游任务微调的代码&#xff0c…

网络安全合规-数据出境安全评估

(一)数据出境安全评估的适用范围为: 数据处理者向境外提供重要数据; 关键信息基础设施运营者和处理100万人以上个人信息的数据处理者向境外提供个人信息;自上年1月1日起累计向境外提供10万人个人信息或者1万人敏感个…

浮点数在内存中的存储

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C语言学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习更多C语言知识   🔝🔝 浮点数在内存的存储 1. 前言&#…

vue3+WebRTC拉流(正确姿势)

vue3WebRTC拉流(正确姿势) 文章目录 vue3WebRTC拉流(正确姿势)缘由一、webRtc拉流是什么?1.实时通信:2.网络穿越:3.媒体处理:4.数据通道:5.使用场景: 二、使用webRtc引用…

《priority_queue的模拟实现》

本文主要介绍 文章目录 一、仿函数1.1 仿函数的定义1.2 普通仿函数1.3 需要自己实现仿函数 二、priority_queue的模拟实现 一、仿函数 1.1 仿函数的定义 所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类。 因此,这里需要明确两点&#xff1…

纯干货:数据库连接耗时慢原因排查

背景 最近公司的社区相关的服务需要优化,由于对业务不熟悉,只能借助监控从一些慢接口开始尝试探索慢的原因。由于社区相关的功能务是公司小程序流量入口,所以相应的服务访问量还是比较高的。针对这类高访问的项目,任何不留神的地…

中睿天下参编的《中国网信产业桔皮书-数据安全》正式发布

5月28日,2023中关村论坛中关村国际技术交易大会第七届中国网信产业前锋汇成功举办,本次会议以“全球数字经济发展与数据安全关键技术”为主题,会议由中国(中关村)网络安全与信息化产业联盟主办(以下简称联盟…

芯片的XIP与BootRom启动方式

XIP:execute in place,就地执行,即芯片内执行,指应用程序可以直接在flash闪存中取指然后译码、执行,不必再把代码读到系统RAM中,flash内执行时指Nor flash不需要初始化,可以直接在flash内执行代…

Elsevier期刊中,撰写Author Statement

Author Statement或Authorship Contribution通常指作者声明,用于声明当前学术论文中每位作者的贡献。 大部分期刊都要求作者在首次投稿的时候就添加这部分内容,也有一些仅要求在发表之前提交。作者声明指导与模板有些学术期刊会专门提供具体的作者声明模…

Vue3 mixin 自定义指令 teleport

文章目录 Vue3 mixin & 自定义指令 & teleportmixin 混入简单使用 自定义指令简单使用全局注册参数 teleport 传送门简单使用 Vue3 mixin & 自定义指令 & teleport mixin 混入 mixins 选项接受一个 mixin 对象数组。这些 mixin 对象可以像普通的实例对象一样…

【企业化架构部署】Apache网页优化

文章目录 一、Apache网页优化概述1.优化内容2.网页压缩2.1gzip概述2.2作用2.3Apache的压缩模块概述mod_gzip模块与mod_deflate模块 3.配置网页压缩功能3.1启用网页压缩功能步骤3.2具体操作步骤 4.配置网页缓存功能4.1启用网页压缩功能步骤4.2具体操作步骤 二、Apache安全优化1.…

【JVM】.class类文件是如何被加载的?

一、类加载过程 .class文件最终加载到JVM并使用整体步骤及图示如下: 每个步骤所做的事情如下: 1、加载 (1)通过一个类的全限定名来获取该类文件的二进制字节流;(读取class文件到内存中) &am…

点击这里!解锁海量数据在openGauss Developer Day 2023的高光时刻

5月26日,openGauss Developer Day 2023在此起彼伏的掌声中圆满落幕。最前沿的核心产品、最深度的专业解读、最全面的落地案例......海量数据在此次盛会上时时高光,事事精彩,尤其是在专场分论坛上,数据库领域各路精英济济一堂&…