Mysql主从分离

一、前言

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

二、什么是读写分离 

        读写分离其实就是将数据库分为主从库,主库负责写入数据,从库负责读取数据,主库与从库通过 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 TOMASTER_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.hqwc.cn/news/66047.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式】MVC 模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。View&#xff…

D. Andrey and Escape from Capygrad Round 892 (Div. 2) 1859D

Problem - D - Codeforces 题目大意:在一个从0到1e9的数轴上,有n个传送门,每个传送门有4个参数,l,r,a,b,可以从[l,r]之间的任意内进入传送门,并传送到[a,b]之间的任意位置,[l,r]一定包含[a,b]&…

SpringBoot系列---【SpringBoot在多个profiles环境中自由切换】

SpringBoot在多个profiles环境中自由切换 1.在resource目录下新建dev,prod两个目录,并分别把dev环境的配置文件和prod环境的配置文件放到对应目录下,可以在配置文件中指定激活的配置文件,也可以默认不指定。 2.在pom.xml中最后位置…

竞赛项目 疫情数据分析与3D可视化 - python 大数据

文章目录 0 前言1 课题背景2 实现效果3 设计原理4 部分代码5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据全国疫情数据分析与3D可视化 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐&#xff0…

性价比最高的护眼灯,护眼台灯应该怎么挑选

随着技术的发展,灯光早已成为每家每户都需要的东西。但是灯光不好可能会对眼睛造成伤害是很多人没有注意到的。现在随着护眼灯产品越来越多,市场上台灯的选择越来越多样化,如何选择一个对眼睛无伤害、无辐射的台灯成为许多家长首先要考虑的问…

在线吉他调音

先看效果&#xff08;图片没有声&#xff0c;可以下载源码看看&#xff0c;比这更好~&#xff09;&#xff1a; 再看代码&#xff08;查看更多&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&quo…

AtCoder Beginner Contest 314

A.直接模拟就行 #include <bits/stdc.h> using namespace std; const int N 2e510; #define int long long int n,m; string s"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";void solve(){cin…

10-1_Qt 5.9 C++开发指南_Data Visualization实现数据三维显示

Data Visualization 是 Qt 提供的用于数据三维显示的模块。在 Qt 5.7 以前只有商业版才有此模块&#xff0c;而从Qt5.7 开始此模块在社区版本里也可以免费使用了。Data Visualization 用于数据的三维显示&#xff0c;包括三维柱状图、三维空间散点、三维曲面等。Data Visualiza…

Idea报错:Cannot resolve symbol “springframework“以及各种依赖包

问题描述&#xff1a; Idea导入了maven项目之后出现报错Cannot resolve symbol “springframework” &#xff0c;识别不了这个标识或者找不到这个包&#xff0c;明明这些依赖和包都有就是出现报错&#xff0c;并且运行按钮变成灰色 解决办法&#xff1a; 其实这个原因大概率就…

SQL SERVER 异地备份到远程共享文件夹异常处理

SQL SERVER 异地备份到远程共享文件夹异常处理 SQL Server 异地备份到远程共享文件夹异常处理 - 灰信网&#xff08;软件开发博客聚合&#xff09; -- 允许配置高级选项 EXEC sp_configure show advanced options, 1 GO -- 重新配置 RECONFIGURE GO -- 启用xp_cmdshell EXEC sp…

【算法基础20-单调栈】

算法原理: 用单调递增栈&#xff0c;当该元素可以入栈的时候&#xff0c;栈顶元素就是它左侧第一个比它小的元素。 以&#xff1a;3 4 2 7 5 为例&#xff0c;过程如下&#xff1a; 动态模拟过程 题目&#xff1a; 给定一个长度为 N 的整数数列&#xff0c;输出每个数左边第一…

Design-Pattern设计模式

Design-Pattern设计模式 图说设计模式 图说设计模式 在线书籍 软件模式是将模式的一般概念应用于软件开发领域&#xff0c;即软件开发的 总体指导思路或参照样板。软件模式并非仅限于设计模式&#xff0c;还包括 架构模式、分析模式和过程模式等&#xff0c;实际上&#xff…