MySQL数据库主从集群搭建

快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)

MySQL数据库主从集群搭建

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是准实时的业务数据库。

作用:
1.做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
2.架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
3.读写分离,使数据库能支撑更大的并发。
1–在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)。
2–在从服务器进行备份,避免备份期间影响主服务器服务;(确保数据安全)。

基于binlog的主从复制搭建

在这里插入图片描述

MySQL提供的主从复制结构种类很多,但主库和从库配置方式几乎相同,实战中较多使用的为一主一从,一主多从模式,以下就以一主多从模式为例进行配置

步骤

  1. 准备环境
    提前准备三台搭建了MySQL以及关闭防火墙的linux,并保证三台MySQL起始数据一致,实战中最好是新的mysql,方便操作,如果无法新建需使用数据备份方式将数据库数据恢复一致
  1. 数据库中创建并授权有主从复制权限账户
    mysql> grant replication slave,reload,super on . to ‘testslave’@‘%’ identified by ‘111111’;
    #监牢模式
    mysql> flush privileges;
    #注意:生产环境中密码采用高级别的密码,实际生产环境中将’%'换成具体的ip
    #注意:该用户理论上只需要主库存在,从库不需要创建,但在实战中,由于各种突发情况从库随时有可能升级为主库,所以所有从库也要创建
    replication slave:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
    super权限:允许用户使用修改全局变量的SET语句以及CHANGE MASTER语句
    reload权限:必须拥有reload权限,才可以执行flush [tables | logs | privileges]
  1. 主库的配置
    修改数据库配置文件 /etc/my.cnf
    保证主库以下两点
    1.binlog日志功能打开
    2.拥有server-id,并且在该主从复制集群中唯一

重启数据库

在这里插入图片描述

#进入主库查看当前主库状态
mysql> show master status\G
#注意:此次查询关注file和position两条信息,从库配置时使用

在这里插入图片描述

  1. 从库的配置
    修改数据库配置文件 /etc/my.cnf
    保证从库有唯一的server-id

重启数据库

在这里插入图片描述

进入从库
#查看从库当前监听主库状态
mysql> show slave status\G
Empty set (0.00 sec) #默认未开启监听

#执行如下命令
mysql> CHANGE MASTER TO
MASTER_HOST=‘192.168.240.134’, #主库ip
MASTER_USER=‘testslave’, #主库用户名
MASTER_PASSWORD=‘123456’, #主库密码
MASTER_LOG_FILE=‘mylog.000001’, #主库配置文件
MASTER_LOG_POS=154; #主库日志偏移量

#开启监听
mysql> start slave;

#查看从库当前监听主库状态
mysql> show slave status\G

在这里插入图片描述

  1. 其余从库做相同配置
  1. 配置完成后查看主从复制是否实现

原理

在这里插入图片描述

Mysql的主从复制中主要有三个线程:master(binlog dump thread)、slave(I/O thread 、SQL thread),Master一条线程和Slave中的两条线程。
master(binlog dump thread)主要负责Master库中有数据更新的时候,会按照binlog格式,将更新的事件类型写入到主库的binlog文件中。并且,Master会创建log dump线程通知Slave主库中存在数据更新,这就是为什么主库的binlog日志一定要开启的原因。
I/O thread线程在Slave中创建,该线程用于请求Master,Master会返回binlog的名称以及当前数据更新的位置、binlog文件位置的副本。然后,将binlog保存在 「relay log(中继日志)」 中,中继日志也是记录数据更新的信息。
SQL thread也是在Slave中创建的,当Slave检测到中继日志有更新,就会将更新的内容同步到Slave数据库中,这样就保证了主从的数据的同步。

总结:
步骤一:主库db的更新事件(update、insert、delete)被写到binlog
步骤二:从库发起连接,连接到主库
步骤三:此时主库创建一个binlog dump thread线程,把binlog的内容发送到从库
步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log.
步骤五:从库还会创建一个SQL线程,从relay log里面读取内容,将更新内容写入到slave的db.

#查看线程
mysql> SHOW PROCESSLIST\G

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

基于GTID的主从复制搭建

全局事务标识:global transaction identifiers(GTID)
是用来代替传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置。

事务

事务:事务是数据库为保证SQL操作完整性而提供的一种机制。保证一个业务对应的多条SQL要么同时成功,要么同时失败。

事务的ACID
  • Atomicity 原子性 保证多条SQL要么同时成功,要么同时失败。
  • Consistency 一致性 事务执行前后,数据的状态是一致的。
  • Isolation 隔离性 并发访问相同数据时,不同用户是否可以看到另外一个用户未提交的数据。oracle默认只能看到提交后的。
  • Durability 持久性 一个事务一旦提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

步骤

  1. 准备三台mysql机器环境,并且创建mysql并赋予权限,同上
  1. 主库配置
    修改数据库配置文件 /etc/my.cnf
    保证以下四点
    log-bin=/opt/liuyh/log #定义server id master必写
    server-id=111 #开启binlog日志,master必写
    gtid_mode=ON #开启gtid
    enforce_gtid_consistency=1 #强制gtid

重启数据库
在这里插入图片描述
3. 从库配置
修改数据库配置文件 /etc/my.cnf
server-id=112
gtid_mode=ON
enforce_gtid_consistency=1

重启数据库

在这里插入图片描述

#进入从库
mysql> stop slave; #停止数据库监听
Query OK, 0 rows affected (0.01 sec)

#设置从库监听信息
mysql> change master to
master_host=‘192.168.240.134’, #主ip 地址 最好用域名
master_user=‘testslave’, #主服务上面创建的用户
master_password=‘123456’,
master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

#开启监听
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

#查看从库监听状态
mysql> show slave status\G

  1. 其余从库做相同配置
  1. 查看主从复制状态

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

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

相关文章

短视频获客系统成功分享,与其开发流程与涉及到的技术

先来看实操成果,↑↑需要的同学可看我名字↖↖↖↖↖,或评论888无偿分享 一、短视频获客系统的开发流程 1. 需求分析:首先需要对目标用户进行深入了解,明确系统的功能和目标,制定详细的需求文档。 2. 系统设计&#…

关于vs code Debug调试时候出现“找不到任务C/C++: g++.exe build active file” 解决方法

vs code Debug调试时候出现“找不到任务C/C: g.exe build active file” ,出现报错,Debug失败 后来经过摸索和上网查找资料解决问题 方法如下 在Vs code的操作页面左侧有几个配置文件 红框里的是需要将要修改的文件 查看tasks.json和launch.json框选&…

Android Frameworks 开发总结之七

1.修改android 系统/system/下面文件时权限不够问题 下面提到的方式目前在Bobcat的userdebug image上测试可行,还没有在user上测试过. 修改前: leifleif:~$ adb root restarting adbd as root leifleif:~$ adb disable-verity verity is already disabled using …

Find My鼠标|苹果Find My技术与鼠标结合,智能防丢,全球定位

随着折叠屏、多屏幕、OLED 等新兴技术在个人计算机上的应用,产品更新换代大大加速,进一步推动了个人计算机需求的增长。根据 IDC 统计,2021 年全球 PC 市场出货量达到 3.49 亿台,同比增长 14.80%,随着个人计算机市场发…

亚马逊云科技re:Invent大会:云计算与生成式AI共筑科技新局面,携手构建未来

随着科技的飞速发展,云计算和生成式 AI 已经成为了推动科技进步的重要力量。这两者相互结合,正在为我们创造一个全新的科技局面。 亚马逊云科技的re:Invent大会再次证明了云计算和生成式AI的强大结合正在塑造科技的新未来。这次大会聚焦了云计算的前沿技…

为什么要隐藏id地址?使用IP代理技术可以实现吗?

随着网络技术的不断发展,越来越多的人开始意识到保护个人隐私的重要性。其中,隐藏自己的IP地址已经成为了一种常见的保护措施。那么,为什么要隐藏IP地址?使用IP代理技术可以实现吗?下面就一起来探讨这些问题。 首先&am…

Qt 软件调试(二)使用dump捕获崩溃信息

Qt应用程序异常崩溃该怎么办&#xff0c;生成dump文件再回溯分析&#xff0c;可以快速且准确的帮助我们定位到崩溃的点。那么&#xff0c;本章我们分享下如何在Qt中生成dump文件。 一、使用minudump捕获崩溃信息 #include <QCoreApplication> #include <QDir> #i…

【洛谷 P1636】Einstein学画画 题解(图论+欧拉通路)

Einstein学画画 题目描述 Einstein 学起了画画。 此人比较懒~~&#xff0c;他希望用最少的笔画画出一张画…… 给定一个无向图&#xff0c;包含 n n n 个顶点&#xff08;编号 1 ∼ n 1 \sim n 1∼n&#xff09;&#xff0c; m m m 条边&#xff0c;求最少用多少笔可以画…

nodejs微信小程序+python+PHP-书吧租阅管理系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

深度学习+不良身体姿势检测+警报系统+代码+部署(姿态识别矫正系统)

正确的身体姿势是一个人整体健康的关键。然而&#xff0c;保持正确的身体姿势可能很困难&#xff0c;因为我们经常忘记这一点。这篇博文将引导您完成为此构建解决方案所需的步骤。最近&#xff0c;我们在使用 POSE 进行身体姿势检测方面玩得很开心。它就像一个魅力&#xff01;…

Ubuntu20安装ssh服务

Ubuntu20上执行如下命令查看是否存在ssh服务 #ps -e | grep ssh 只有ssh-agent&#xff0c;没有sshd; 因此要安装openssh-server. 搜索openssh-server,得到下载链接&#xff1a; openssh-server 复制这个Binary Package链接即可下载&#xff0c;然后使用如下命令安装 sudo…

PyQt6库和工具库QTDesigner安装与配置

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计12条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

【knife4j-spring-boot】Springboot + knife4j-spring-boot 整合swagger脚手架

swagger-boostrap-ui从1.x版本到如今2.x&#xff0c;同时也更改名字Knife4j 在此记录下 knife4j-spring-boot-starter 的整合。 只需要引入knife4j-spring-boot-starter&#xff0c;无需引入其他的swagger包&#xff0c;knife4j-spring-boot-starter已经包含。 官方版本说明…

详细解答T-SNE程序中from sklearn.manifold import TSNE的数据设置,包括输入数据,绘制颜色的参数设置,代码复制可用!!

文章目录 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的缩写1、可运行的T-SNE程序2. 实验结果3、针对上述程序我们详细分析T-SNE的使用方法3.1 加载数据3.2 TSNE降维3.3 绘制点3.4 关于颜色设置&#xff0c;颜色使用的标签数据的说明cy 总结 前言——TSNE是t-D…

Centos Download

前言 CentOS Linux 是一个社区支持的发行版&#xff0c;源自 CentOS git for Red Hat Enterprise Linux &#xff08;RHEL&#xff09; 上免费提供给公众的源代码。因此&#xff0c;CentOS Linux 的目标是在功能上与 RHEL 兼容。CentOS 计划主要更改组件以删除上游供应商的品牌…

【微服务专题】SpringBoot自动配置源码解析

目录 前言阅读对象阅读导航前置知识笔记正文0、什么是自动配置0.1 基本概念0.2 SpringBoot中的【约定大于配置】0.3 从SpringMVC看【约定大于配置】0.4 从Redis看【约定大于配置】 一、EnableAutoConfiguration源码解析二、SpringBoot常用条件注解源码解析2.1 自定义条件注解2.…

java 反射和注解1-反射详解

反射和注解本就是一家人&#xff0c;注解离不开反射&#xff0c;这里先将反射的写法&#xff0c;本文涉到的注解暂时可以不不用理解 1&#xff0c;创建一个类 public class ReflexUser {public String name;private String namePrivate;protected String nameProtected;Strin…

Arduino库之 LedControl 库说明文档

LedControl 库最初是为基于 8 位 AVR 处理器的 Arduino 板编写的。用于通过MAX7219芯片控制LED矩阵和7段数码管。但由于该代码不使用处理器的任何复杂的内部功能&#xff0c;因此具有高度可移植性&#xff0c;并且应该在任何支持 和 功能的 Arduino&#xff08;类似&#xff09…

模拟火车订票系统---python序列

if __name__ __main__:#创建车辆信息列表list["车次","出发站-到达站","出发时间","到达时间","历时","余票"]trainNumber[T40,T298,Z158,Z62]address[长春-北京,长春-北京,长春-北京,长春-北京]getTime[00:12,0…

简单介绍一下js中的构造函数、原型对象prototype、对象原型__proto__、原型链

构造函数 function Star (uname, age){this.uname unamethis.age agethis.sing function(){ log(唱歌~) }}let xzq new Star(薛之谦, 30)let ldh new Star(刘德华, 20)log(ldh) // { uname: 刘德华, age: 20, sing: f }ldh.sing() // 唱歌~log(ldh.sing xzq.sing) // fal…