Mysql主从分离

news2024/11/25 10:55:56

一、前言

        某个应用场景中,在操作数据库这部分,往往是数据库的读取往往大于数据库的写入,当读取数据达到数据库的瓶颈时,性能下滑,影响数据的写入,导致整个应用的不可用。为了解决这个问题,这时,引入了 读写分离的数据库架构,多个从库分摊了读数据的压力。

二、什么是读写分离 

        读写分离其实就是将数据库分为主从库,主库负责写入数据,从库负责读取数据,主库与从库通过 mysql 的 Slave机制进行主从复制。主数据库只有一个,从数据库有多个,这是一种常见的数据库架构。

三、读写分离的结构图

        

         上图,客户端访问服务器,服务器通过 数据库中间件 或者其他的逻辑,使得[写入、修改、删除] 操作 主库 , 而查询读取从库。

        主库生产 binary log 的二进制日志文件,通过 slave 机制,通过连接主库,读取 binarylog 生成 中级文件,从数据同步 中级文件,写入从数据库,从而实现了 主从数据的同步。

四、前提条件

         1、搭建读写分离数据库结构前,读库 slave 需要跟写库 master 的数据一致。

         2、写数据必须操作主库

        3、读去数据不一定是从库,因为从库同步主库的数据,会有一定的延迟,在延迟内,主从数据可能不一致,因此,在某些特殊的情况下,需要读取主库来保证数据的即使型。

        读写分离降低主数据库的读压力,但是并不代表主库就不允许读数据了。在一些特殊场景允许读取主数据库的数据。

五、环境准备

         为了实验,我这里准备了3台机器,一台  window , 2台 centos 7 的虚拟机。

避免一些不必要问题,推荐主从mysql 版本一致。

主机角色系统mysql版本
192.168.83.1win115.7.26注意开放3306端口
192.168.23.148centos78.0.34

主数据库:

 从数据库:

 

 六、配置主数据库

        我们配置主数据库时,只需要生成 binary log 的二进制日志文件  和创建一个拥有访问权限的 mysql 用户 即可,其他的操作不会影响到从数据库的配置。

        1、看看一下主数据库的状态

        查看 主库的状态。

show master status;

 输出结果: 

        从上图可以看出, 暂时没有主从的设置。 

        2、配置文件的设置

        找到 win 11 下面的 mysql 配置文件  my.ini 。在 配置文件的 [mysqld] 下面增加配置,如下:

#  这里填1 ,可以任意填写,但是不允许数据库之间同
server-id=1
# 只备份的数据库
binlog-do-db=demo_slave
# binlog_ignore_db 表述忽略备份的数据库
binlog_ignore_db=mysqld
# binary log 二进制日志文件的格式,有三种(statement , row , mixed),可以根据场景选用,mysql默认采用statement,建议使用mixed
binlog_format=mixed
# 二进制文件记录
log-bin=master-bin
# 生成二进制文件的名称格式
log-bin-index=master-bin.index

        把上面的配置复制到 mysql 的配置文件,然后重启 mysql 服务,在使用 show master status; 查看主库的配置情况。

主从配置还有很多配置,请自行配置百度。

 重启之后,你会发现在 mysql 存放数据库的文件里面出现了 对应的 binary log 文件。

 登录 MySQL, 查看状态:

 如果出现上诉结果,则主库的配置部分已完成。

3、创建主从访问的用户

        1、查看一下用户

        2、创建复制用户 [repl]

-- 创建用户
create user repl;

         3、给[repl]用户权限

# 给 repl 用户授权,并设置密码为  replpwd
# 允许 % 所有服务器访问
grant replication slave on *.* to 'repl'@'%' identified by'replpwd';

输出结果:

 七、配置从数据库

 1、查看从数据库的slave状态

# 查看 slave 的状态
show slave status \G;

 2、查看从数据库的配置

 

 3、配置文件的设置

 在配置文件 【mysqld】 下面增加配置如下:

#  这里填2 ,可以任意填写,但是不允许数据库之间同
server-id=2
# 中继日志文件的命名格式
relay-log-index=slave-relay-bin.index
# 中继日志文件的汇总文件
relay-log=slave-relay-bin

# 只复制数据库 , 多个数据库写多条
#只复制db1和db2数据库
; replicate-do-db=db1
; replicate-do-db=db2
replicate-do-db=demo_slave

# 忽略复制数据库 , 多个数据库写多条
replicate-ignore-db=mysql

 配置完成后,重启 mysql 服务,然后查看

         配置完成后, mysql 的数据 目录下 自动生产了  4个数据文件。

4、链接主数据库

-- 连接数据库
CHANGE MASTER TO
  MASTER_HOST='192.168.83.1',
  MASTER_USER='repl',
  MASTER_PASSWORD='replpwd',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=154;

-- MASTER_HOST 主数据库的IP
-- MASTER_USER 主数据库的用户
-- MASTER_PASSWORD 主数据库的用户密码
-- MASTER_PORT  主数据库的端口,必须查看主数据库服务器是否有开放端口
-- MASTER_LOG_FILE   主数据库的  binarylog 二进制日志文件
-- MASTER_LOG_POS    主数据库的  binarylog 二进制日志 的偏移量(主数据库是多少则填多少)

 启动 slave

start slave

如果报错:

ERROR 1872 (HY000): Replica failed to initialize applier metadata structure from the repository

         因为从数据库可能以前配置过,生成过 中继日志文件,导致 从数据库 slave 中还记录着旧数据,这时可以使用 命令

reset slave

重新设置即可。

 查看状态:

查看数据库: 

 

 5、检查从数据库是否运作正常

 在主数据库创建 demo_master 数据库,看看 从数据库是否同步过来。

 有上图可知,没有同步上来。

 

 

 

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

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

相关文章

java热插拔组件 SPI机制

文章目录 前言一、热插拔(spi机制)是什么?二、使用步骤1.利用java META-INF2.利用google spi3. 测试效果 总结 前言 在项目中,如果想要增加项目的灵活性,健壮性, 高逼格,那么你要对于java中的一些机制有了解; 例如: java中的spi机制spring中的spring.factories 等…

QtCreator ui设置界面 Layout 的属性 layoutStretch

layoutStretch 用于控制Layout在被用户进行缩放时。里面控件的缩放比例。如一个水平布局里面有两个控件 一个 QLineEdit 和 QPushButton。首先将两个控件的尺寸策列的水平策略都设置为Expanding。此时在将包含这两个控件的水平布局的 layoutStretch 进行如下设置。 运行程序就…

权衡与选择:如何巧妙管理项目需求的优先级

在项目管理领域,处理和管理需求可能是最具挑战性的环节之一。每一个项目都充满了各种需求,从业务需求到技术需求,从用户需求到系统需求。而如何有效地为这些需求排列优先级,不仅会影响项目的进度和资源分配,还会直接关…

Azure创建第一个虚拟机

首先,登录到 Azure 门户 (https://portal.azure.com/)。在 Azure 门户右上角,点击“虚拟机”按钮,并点击创建,创建Azure虚拟机。 在虚拟机创建页面中,选择所需的基本配置,包括虚拟机名称、操作系统类型和版…

threejs纹理的使用

实现地板的效果,需要导入3张图片,第一种样式,第二种,木板间的间隙,第三种,木板的粗细图片。先注册一个物体属性,在物体属性上加上图片,注册代码如下图: const floorMat …

乡村振兴指数与其30余个原始变量数据(2000-2022年)

乡村振兴是当下经济学研究的热点之一,对乡村振兴进行测度,是研究基础。测度乡村振兴水平的学术论文广泛发表在《数量经济技术经济研究》等顶刊上。整理了2000-2022年城市层面的乡村振兴指数与其30余个原始变量数据,供大家使用。 数据来源&…

大数据Flink(六十二):批处理的入门案例

文章目录 批处理的入门案例 一、示例 二、​​​​​​​开发步骤

Ae 效果:CC Environment

透视/CC Environment Perspective/CC Environment CC Environment(CC 环境)主要用于创建 3D 环境映射,可以将一个 2D 图像转换为 3D 空间的反射或折射。该效果通常用于模拟真实世界的全景相机镜头和环境反射。 在实际操作中,可将效…

阿里云服务器带宽计费模式怎么选?有什么区别?

阿里云服务器公网带宽计费模式按固定带宽和按使用流量哪个划算?阿里云百科以北京地域为例,按固定带宽计费1M带宽一个月23元,按使用流量计费1GB流量0.8元,如果云服务器带宽使用率低于10%,那么首选按使用流量计费&#x…

中国省级、城市-数字经济创新创业、分项指数(2010-2020年)

一、数据介绍 数据名称:中国省级、城市-数字经济创新创业、分项指数 数据年份:2010-2020年 数据范围:31省、336个城市 数据来源:北大企业大数据研究中心 二、参考文献 参考文献: 戴若尘,王艾昭,陈斌开.中国数字…

【C++】模拟实现map和set(用红黑树进行封装)

模拟实现map和set 前言正式开始简单框架data的比较迭代器operatoroperator-\-[ ]重载 前言 本篇以前一篇红黑树模拟实现插入功能为基础:【C】红黑树模拟实现插入功能(包含旋转和变色) 本篇中不会再讲解关于旋转和变色的知识。只是对于红黑树进行简单的封装。 如果…

java操作mongdb【超详细】

Java操作 搭建 搭建 依赖 <!--mongodb--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>配置文件 spring:data:mongodb:host…

opencv图片换背景色

#include <iostream> #include<opencv2/opencv.hpp> //引入头文件using namespace cv; //命名空间 using namespace std;//opencv这个机器视觉库&#xff0c;它提供了很多功能&#xff0c;都是以函数的形式提供给我们 //我们只需要会调用函数即可in…

烧写PYNQ镜像到SD卡

一&#xff0c;安装 Win32diskimager 首先将Micro SD卡插入读卡器的卡槽中&#xff0c;然后再将读卡器插入计算机USB接口&#xff0c;此时计算机将会识别到插入的可移动磁盘。双击打开Win32DiskImager-1.0.0.zip 压缩文件&#xff0c;里面win32diskimager-1.0.0-install.exe文…

ORCA优化器浅析——CDXLOperator Base class for operators in a DXL tree

如上图所示&#xff0c;CDXLOperator作为Base class for operators in a DXL tree&#xff0c;其子类CDXLLogical、CDXLScalar、CDXLPhysical作为逻辑节点、物理节点和Scalar节点的DXL表示类&#xff0c;因此其包含了这些类的共同部分特性&#xff0c;比如获取其DXL节点表示的函…

CNN之图像识别

文章目录 1. 图像识别1.1 模式识别1.2 图像识别的过程1.3 图像识别的应用 2. 深度学习发展2.1 深度学习为何崛起2.2 分类与检测2.3 常见的卷积神经网络 3. VGG3.1 VGG163.2 VGG16的结构&#xff1a;3.3 使用卷积层代替全连接3.4 1*1卷积的作用3.5 VGG16代码示例 4. 残差模型-Re…

ctfshow-web8

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 这道题实际上就是一个单纯的布尔型盲注&#xff0c;只不过是过滤了一些东西&#xff0c;一个是过滤的空格&#xff0c;还有一个是过滤了逗号 那么我们需要做的就是对这两个进行绕过&#xff0c;空格还是用/**…

Spring系列五:手动实现Spring底层机制

文章目录 &#x1f35d;类加载器和classpath详解 &#x1f497;实现任务阶段1&#x1f35a;编写自己Spring容器, 扫描包得到bean的class对象 &#x1f497;实现任务阶段2&#x1f35a;扫描将bean信息封装到BeanDefinition对象, 并放入到Map &#x1f497;实现任务阶段3&#x1…

Unity 鼠标控制 UI 放大、缩小、拖拽

文章目录 1. 代码2. 测试场景 1. 代码 using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems;public class UIDragZoom : MonoBehaviour, IDragHandler, IScrollHandler {private Vector2 originalSize;private Vector2 originalPosition;private RectTr…

一个案例:Vue2组件化开发组件从入门到入土

1. 环境搭建 1.1. 创建项目 npm install -g vue/clivue create vue_study_todolist1.2. 清空项目代码 清楚HelloWorld.Vue代码中的内容。 1.3. 启动空项目 1.4 项目目标 项目组件实现以下效果 2. 组件拆分代码 Vue是一个基于组件的框架&#xff0c;允许您将界面拆分成小的…