MySQL数据库主从集群搭建

news2024/11/13 15:01:36

快捷查看指令 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.coloradmin.cn/o/1249720.html

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

相关文章

win10安装pytorch(py39)

cuda≤11.6,观察控制面板 观察torch对应cuda版本 https://download.pytorch.org/whl/torch/ 安装cuda11.6.0 CUDA Toolkit Archive | NVIDIA Developer cmd输入nvcc -V 编辑国内镜像源 .condarc anaconda prompt输入 查看环境 conda env list 安装py3.9…

LedControl 库说明文档

LedControl 库最初是为基于 8 位 AVR 处理器的 Arduino 板编写的。但由于该代码不使用处理器的任何复杂的内部功能,因此具有高度可移植性,并且应该在任何支持 和 功能的 Arduino(类似)板上pinMode()运行digitalWrite() 。 单个 M…

中电金信:守【政】创新,探路保险数字化转型“新范式”

11月23日,CIIP2023中国保险科技创新合作大会在京举办。大会汇集保险科技领域行业专家、学者、国内外头部险企及保险科技公司负责人等各界人士,立足保险行业高质量发展和创新驱动理念,寻找行业数字化转型新动能、新视角,为保险科技…

【基础知识】AB软件RSLinx如何实现OPC通讯组态

哈喽,大家好,我是雷工。 在上一节了解了什么是RSLinx?以及RSLinx Lite、RSLinx Classice、RSLinx Professional、RSLinx Gateway几个版本的特点。 本节了解AB的RSLinx如何实现OPC组态。 一、创建RSLinx通讯: 1.1、【Communicati…

vue2项目从0搭建(三):配置环境变量及对应的webpack配置

前言 实际业务开发中,一个项目很可能会同时配置好几套环境。 比如:常规开发环境,开发测试环境,正式的测试环境,预发测试环境,客户甲的生产环境,客户乙的生产环境,通用生产环境,独立应用环境,微前端环境,大屏专用环境,移动端环境。 一女多嫁的实际业务场景,就需要我们进行多样…

mac上Homebrew的安装与使用

打开终端:command空格 ,搜索‘’终端 ’,打开终端 在终端中输入以下命令并按下回车键: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"这个命令会自动下载并安装…

某60区块链安全之未初始化的存储指针实战二学习记录

系列文章目录 文章目录 系列文章目录未初始化的存储指针实战二实验目的实验环境实验工具实验原理实验内容实验过程EXP利用 未初始化的存储指针实战二 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约未初始化的存储指针漏洞 找到合约漏洞进行分析并形成利用 实验…

win11渗透武器库,囊括所有渗透工具

开箱即用,最全的武器库,且都是2023年11月最新版,后续自己还可以再添加,下载地址:https://download.csdn.net/download/weixin_59679023/88565739 服务连接 信息收集工具 端口扫描 代理抓包 漏洞扫描 指纹识别 webshel…

apipost接口200状态码,浏览器控制台500状态码

后端 url 登录login方法 login(){this.$refs.loginForm.validate(async valid > {if (!valid) return// 由于data属性是一个json对象,需要进行解构赋值{data:result},进行状态码判断const {data: result} await this.$http.post(/api/doLogin,this.…

解决在Windows10或Windows11下无权限修改hosts文件

解决在Windows10或Windows11下无权限修改hosts文件,无法写入内容 1、首先在开始菜单中找到这个 2、接着输入: C:\Windows\System32\drivers\etc3、再次输入以下命令行:notepad hosts ,并回车: notepad hosts 4、然后…

Java专题(二)反射

反射概述 Java 反射就是在运行的状态下,对于任意一个类,都能知道这个类的任意的属性和方法,并且能调用这些方法或者改变这些类的属性,因此 Java 被称为准动态语言。 动态语言和静态语言 上面说了 Java 是准动态的语言&#xff0c…

面向对象三大特性,类与接口,java重写与重载,对象相等的判断, hashCode 与 equals

文章目录 2.1 面向对象三大特性2.1.1 封装 继承 多态2.1.2 其中Java 面向对象编程三大特性:封装 继承 多态2.1.3 关于继承如下 3 点请记住:2.1.4 什么是多态机制?Java语言是如何实现多态的?2.1.5 Java实现多态有三个必要条件&…

电脑中提示关于ntdll.dll错误怎么办,解决出现ntdll.dll错误的办法

ntdll.dll是Windows操作系统的一个关键系统文件,它包含了许多核心函数和系统调用,对于系统的稳定运行至关重要。然而,有时我们可能会遇到ntdll.dll报错的问题,导致程序无法正常运行。那么今天就和大家谈谈电脑中提示关于ntdll.dll…

企业计算机服务器中了360勒索病毒怎么办,360勒索病毒解密文件恢复

计算机技术的不断发展,为企业的生产运营提供了极大便利,不仅提升了办公效率,还促进了企业的发展。企业计算机在日常工作中一定加以防护,减少网络威胁事件的产生,确保企业的生产生产运营。最近,网络上的360后…

两巨头Facebook 和 GitHub 联手推出 Atom-IDE

9月13日,GitHub 宣布与 Facebook 合作推出了 Atom-IDE —— 它包括一系列将类 IDE 功能带到 Atom 的可选工具包。初次发布的版本包括更智能、感知上下文的自动完成;导航功能,如大纲视图和定义跳转(outline view and goto-definition)&#xf…

爬虫项目实战:利用基于selenium框架的爬虫模板爬取豆瓣电影Top250

👋 Hi, I’m 货又星👀 I’m interested in …🌱 I’m currently learning …💞 I’m looking to collaborate on …📫 How to reach me … README 目录(持续更新中) 各种错误处理、爬虫实战及模…

【JAVA】SpringBoot + mongodb 分页、排序、动态多条件查询及事务处理

【JAVA】SpringBoot mongodb 分页、排序、动态多条件查询及事务处理 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mongodb ↓ -->&…

2023年亚太杯数学建模A题解题思路(*基于OpenCV的复杂背景下苹果目标的识别定位方法研究)

摘要 由于要求较高的时效性和劳力投入&#xff0c;果实采摘环节成为苹果生产作业中十分重要的一部分。而对于自然环境下生长的苹果&#xff0c;光照影响、枝叶遮挡和果实重叠等情况普遍存在&#xff0c;这严重影响了果实的准确识别以及采摘点的精确定位。针对在复杂背景下苹果的…

android 保活的一种有效的方法

android 保活的一种有效的方法 为什么要保活 说起程序的保活,其实很多人都觉得,要在手机上进行保活,确实是想做一些小动作,其实有些正常的场景也是需要我们进行保活的,这样可以增强我们的用户体验。保活就是使得程序常驻内存,这种程序不容易被杀,或者在被杀以后还能完…

kubernetes使用nfs创建pvc部署mysql stateful的方法

kubernetes创建的pod默认都是无状态的&#xff0c;换句话说删除以后不会保留任何数据。 所以对于mysql这种有状态的应用&#xff0c;必须使用持久化存储作为支撑&#xff0c;才能部署成有状态的stateful. 最简单的方法就是使用nfs作为网络存储&#xff0c;因为nfs存储很容易被…