【MySQL数据库】 MySQL主从复制

MySQL主从复制

    • MySQL主从复制
      • 主从复制与读写分离的意义
      • 主从数据库实现同步(主从复制)
      • 三台mysql服务器搭建主从复制,要求不可以用root帐号同步,要求第三台服务器在测试过1、2的主从复制之后进行主从复制配置
      • 四台mysql服务器(m1,s1,m2,s2)的主从复制,两主两从,s1是m1的从,m2是s1从,s2是m2的从
      • 优势
      • 劣势


MySQL主从复制

主从复制与读写分离的意义

企业中的业务通常数据量都比较大,而单台数据库在数据存储、安全性和高并发方面都无法满足实际的需求,所以需要配置多台主从数据服务器,以实现主从复制,增加数据可靠性,读写分离,也减少数据库压力和存储引擎带来的表锁定和行锁定问题。

主从数据库实现同步(主从复制)

什么是主从复制?简单来说就是在主服务器上执行的语句,从服务器执行同样的语句,在主服务器上的操作在从服务器产生了同样的结果。

主从复制的基本过程如下:

  • Master(主数据库)将用户对数据库更新的操作以二进制格式保存到BinaryLog日志文件中。

  • Slave(从数据库)上面的IO进程连接上Master, 并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容。

  • Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置。

  • Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master “我需要从某个bin- log的哪个位置开始往后的日志内容,请发给我”。

  • Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay- log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。

在这里插入图片描述

三台mysql服务器搭建主从复制,要求不可以用root帐号同步,要求第三台服务器在测试过1、2的主从复制之后进行主从复制配置

# 0.架构规划
192.168.99.116 master 主节点
192.168.99.117 slave1 从节点
192.168.99.118 slave2 从节点
# 1.修改mysql的配置文件
 vim /etc/my.cnf
# 2.分别在配置文件中加入如下配置
mysql(master):
server-id=1
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

mysql(slave1):
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

mysql(slave2):
server-id=3
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

# 3.重启mysql服务
systemctl restart mysqld
# 4.登录mysql执行如下命令检测配置是否生效
SHOW VARIABLES like 'server_id';

在这里插入图片描述

# 5.登录master节点执行如下命令
show master status;
create user 'namida' @'localhost' identified by 'Namida@123';

在这里插入图片描述

主数据库授权

 grant all privileges on *.* to 'namida'@'%' identified by 'Namida@123' with grant option;

# 6.登录从节点执行如下命令:
change master to
master_host='192.168.99.116',
master_user='namida',
master_password='Namida@123',
master_log_file='mysql-bin.000006',
master_log_pos=454;
# 7.开启从节点
start slave;
#关闭 stop slave;

在这里插入图片描述

# 8.查看从节点状态
show slave status\G;

slave1:
在这里插入图片描述
slave2
在这里插入图片描述

# 9.通过客户端工具进行测试

在master上新建数据库和表
在这里插入图片描述
slave同步数据
在这里插入图片描述

注意:如果出现Slave I/O: Fatal error: The slave I/O thread stops because master and slave have
equal MySQL server UUIDs; these UUIDs must be different for replication to work.
Error_code: 1593错误,请执行如下命令,rm -rf /var/lib/mysql/auto.cnf删除这个文件,之所以会出现这样的问题,是因为我的从库主机是克隆的主库所在的主机,所以auto.cnf文件中保存的UUID会出现重复.

四台mysql服务器(m1,s1,m2,s2)的主从复制,两主两从,s1是m1的从,m2是s1从,s2是m2的从

# 0.架构规划
192.168.99.116 master1 主节点1
192.168.99.117 slave1 从节点1
192.168.99.118 master1 主节点1
192.168.99.119 slave2 从节点
# 1.修改mysql的配置文件
 vim /etc/my.cnf
# 2.分别在配置文件中加入如下配置
mysql(master1):
server-id=1
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

mysql(slave1):
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

mysql(master2):
server-id=3
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

mysql(slave2):
server-id=4
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

# 3.重启mysql服务
systemctl restart mysqld
# 4.登录mysql执行如下命令检测配置是否生效
SHOW VARIABLES like 'server_id';
# 5.登录master1、slave1、master2节点执行如下命令
show master status;
create user 'namida' @'localhost' identified by 'Namida@123';

# 6.登录主节点1、从节点1、2执行如下命令:
change master to
master_host='192.168.99.116',
master_user='namida',
master_password='Namida@123',
master_log_file='mysql-bin.000006',
master_log_pos=454;

change master to
master_host='192.168.99.117',
master_user='namida',
master_password='Namida@123',
master_log_file='mysql-bin.000001',
master_log_pos=1217;

change master to
master_host='192.168.99.118',
master_user='namida',
master_password='Namida@123',
master_log_file='mysql-bin.000001',
master_log_pos=1772;
# 7.开启从节点
start slave;

测试:
master1
在这里插入图片描述
slave1

在这里插入图片描述
master2
在这里插入图片描述
slave2

加粗样式
部署一个由四台MySQL服务器构成的双主双从复制架构(m1, s1, m2, s2),其中m1和m2为两个主服务器,s1和s2分别为它们的从服务器,这样的设置有其特定的优势与劣势:

优势

  1. 高可用性:此配置提高了系统的整体可用性。如果其中一个主服务器(比如m1)发生故障,s1作为其从服务器可以迅速提升为主服务器,同时m2仍然在服务,保证了数据的连续访问。同理,m2故障时,m1和s1组合也能保持服务。

  2. 负载均衡:通过在两个主服务器上分担读写操作,可以有效减轻单个服务器的压力,实现负载均衡,提高处理能力。

  3. 数据冗余:每个主服务器的数据都会被至少一个从服务器复制,提供了数据冗余,增强了数据安全性。即使某个服务器硬件故障导致数据丢失,也能从其他服务器恢复。

  4. 可扩展性和灵活性:这种结构易于扩展,可以根据需要添加更多的从服务器来处理读取密集型操作,或调整复制链路以适应不同的流量模式。

劣势

  1. 复杂性增加:相比于单一主从结构,双主双从结构的管理和维护更加复杂。需要监控多个服务器间的复制状态,解决可能出现的冲突,以及确保数据一致性。

  2. 数据不一致风险:在双主模式下,如果不恰当管理,可能会出现数据冲突或不一致的问题。尤其是在双向复制(即m1和m2互相复制)未正确配置时,容易引发循环复制问题。

  3. 资源消耗:多服务器架构会增加网络带宽、存储空间和计算资源的需求,尤其是在数据同步过程中,可能会对系统性能产生影响。

  4. 故障恢复复杂:当主服务器发生故障时,需要手动干预来提升从服务器的角色,并重新配置复制关系,这相比单一主从结构更复杂且容易出错。

  5. 延迟问题:数据在多个节点间复制可能会引入延迟,对于实时性要求较高的应用可能会影响用户体验。

总之,双主双从的MySQL复制架构提供了更高的可用性和扩展性,但同时也带来了复杂度、数据一致性维护和资源消耗等挑战。在实际部署时,应根据业务需求、资源条件和技术能力综合考虑。
在这里插入图片描述

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

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

相关文章

如何遍历并处理不平衡的Python数据集

目录 一、引言 二、不平衡数据集的概念与影响 三、处理不平衡数据集的策略 重采样策略 集成学习方法 代价敏感学习 一分类方法 四、Python工具与库 五、案例分析与代码实现 案例一:使用imbalanced-learn库进行上采样 案例二:使用scikit-learn…

史上最全网络安全面试题+答案

1、什么是SQL注入攻击 前端代码未被解析被代入到数据库导致数据库报错 2、什么是XSS攻击 跨站脚本攻击 在网页中嵌入客户端恶意脚本,常用s语言,也会用其他脚本语言 属于客户端攻击,受害者是用户,网站管理员也属于用户&#xf…

小白windows系统从零开始本地部署大模型全记录

大家好,最近两年大语言模型风靡全球,最近,不少开源大模型,将模型部署到自己的电脑上,用个性化的数据微调想必是不少人的愿望,这次,让我来分享从hugging face上下载部署chatglm3-6b中的经验。 1.…

2024-2025年跨境电商展览会计划表:共筑未来跨境行业的繁荣

-----------------------------2024年跨境电商展计划如下---------------------------- 2024年,2025年国内跨境电商行业将迎来一系列重大的展会活动,是企业展示品牌、交流趋势、拓展商机的重要平台。全国各地展会排期信息现已出炉,记得收藏哦…

图解PHP MySQL:轻松掌握服务器端Web开发

在当今数字化时代,Web开发成为了一个炙手可热的领域,而PHP和MySQL作为Web开发领域的两大基石,其重要性不言而喻。对于初学者和寻求深化理解的开发者而言,一本好的教材就如同灯塔一般,指引着他们前行。《图解PHP & …

ES升级--04--SpringBoot整合Elasticsearch

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 SpringBoot整合Elasticsearch1.建立项目2.Maven 依赖[ES 官方网站:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.8/index.html](…

如何修改uni微信小程序editor组件和input组件的placeholder默认样式

需求 修改input组件的placeholder的颜色修改editor的placeholder的默认样式 input组件的placeholder样式修改 使用 placeholder-class&#xff0c;官网&#xff08;input | uni-app官网&#xff09;说明如下&#xff1a; html <input type"text" placeholder&…

layui实现表格根据数据来勾选已保存的数据

示例图 勾选一次保存后&#xff0c;每次进到查询都会看到被勾选的数据&#xff0c;代码如下&#xff1a; done: function(res, curr, count) {var groupId "[[${groupId}]]";$.ajax({url: //写后端获取数据的接口type: GET,success: function(data) {console.log(d…

STL-priority_queue的使用及其模拟实现

优先级队列(priority_queue)默认使用vector作为其底层存储数据的容器&#xff0c;在vector上又使用了堆算法将vector中的元素构造成堆的结构&#xff0c;因此priority_queue就是堆&#xff0c;所有需要用到堆的位置&#xff0c;都可以考虑使用priority_queue。 注意&#xff1…

Vue使用axios实现调用后端接口

准备后端接口 首先&#xff0c;我已经写好一个后端接口用来返回我的用户数据&#xff0c;并用Postman测试成功如下&#xff1a; 以我的接口为例&#xff0c;接口地址为&#xff1a;http://localhost:8080/user/selectAll 返回Json为&#xff1a; {"code": "2…

1.3纹理介绍

纹理是什么&#xff1f; 纹理的概念 一种可供着色器读写的结构化存储形式 任何图片都可以作为纹理 &#xff08;但纹理就是图片并不正确&#xff0c;因为纹理并不一定是图片&#xff0c;处理包含具体储存的信息以外&#xff0c;还会包含纹理采样的一些设置&#xff09; 纹理…

只刷题可以通过PMP考试吗?

咱们都知道&#xff0c;PMBOK那本书&#xff0c;哎呀&#xff0c;读起来确实有点费劲。所以&#xff0c;有些人就想了&#xff0c;干脆我就刷题吧&#xff0c;题海战术&#xff0c;没准儿也能过。这话啊&#xff0c;听起来似乎有点道理&#xff0c;但咱们得好好琢磨琢磨。 刷题…

卷积常用网络

目录 1.AlexNet2.VGG3.GoogleNet4.ResNet5.MobileNet 1.AlexNet AlexNet是2012年ISLVRC 2012&#xff08;ImageNet Large Scale Visual Recognition Challenge&#xff09;竞赛的冠军网络。 首次利用 GPU 进行网络加速训练。使用了 ReLU 激活函数&#xff0c;而不是传统的 Si…

音视频开发—FFmpeg 音频重采样详解

音频重采样&#xff08;audio resampling&#xff09;是指改变音频信号的采样率的过程。采样率&#xff08;sample rate&#xff09;是指每秒钟采集的音频样本数&#xff0c;通常以赫兹&#xff08;Hz&#xff09;或每秒样本数&#xff08;samples per second&#xff09;表示。…

如何理解和使用 this 关键字

this 关键字是许多编程语言中的一个核心概念&#xff0c;在面向对象编程&#xff08;OOP&#xff09;中尤为重要。在JavaScript、Java、C、C#等语言中&#xff0c;this 扮演着至关重要的角色。理解 this 的意义和用法&#xff0c;对于编写清晰、有效的代码至关重要。 什么是th…

OrangePi Kunpeng Pro体验——安装Hass与驱动SPI小屏幕

OrangePi Kunpeng Pro 是一款面向开发者和爱好者的高性能开发板。在本次测评中&#xff0c;主要将以前的一些代码在该开发板上实现&#xff0c;包括docker部署hass&#xff0c;引脚驱动SPI小屏幕。中间遇到了一些小小问题&#xff0c;但都成功了&#xff0c;一起来试试吧~ 一、…

wifi贴码推广哪家靠谱?

如今越来越多的人想轻资产创业&#xff0c;WIFI贴码是共享行业最无成本的创业项目了&#xff0c;而在选择厂商的时候&#xff0c;大家就想要知道哪家公司靠谱&#xff0c;更好、更便宜、可靠。那么wifi贴码推广哪家靠谱&#xff1f;别急&#xff0c;下面小编将带你一起了解。 目…

LLM - 模型下载与 git-lfs 安装

目录 一.引言 二.安装 git lfs 1.使用 apt-get 安装 2.使用 Brew 安装 3.LFS 验证 三.总结 一.引言 在 HuggingFace 上下载模型时提供一个 git clone 的指令&#xff0c;执行后可以下载对应模型的模型文件: 但是本机还没有 git lfs 命令: git: lfs is not a git comman…

CPU对代码执行效率的优化,CPU的缓存、指令重排序

目录 一、CPU对代码执行效率的优化 1. 指令流水线&#xff08;Instruction Pipelining&#xff09; 2. 超标量架构&#xff08;Superscalar Architecture&#xff09; 3. 动态指令重排序&#xff08;Dynamic Instruction Reordering&#xff09; 4. 分支预测&#xff08;…