当前位置: 首页 > news >正文

MySQL基于GTID同步模式搭建主从复制

系列文章目录

rpmbuild构建mysql5.7.42版本的rpm包


文章目录

  • 系列文章目录
  • 一、mysql-5.7.42RPM包构建
  • 二、同步模式分类介绍
    • 1.异步同步模式
    • 2.半同步模式
      • 2.1.实现半同步操作流程
      • 2.2.半同步问题总结
      • 2.3.半同步一致性
      • 2.4.异步与半同步对比
    • 3.GTID同步
  • 三、GTID同步介绍
    • 1.gtid介绍
    • 2.gtid组成
    • 3.gtid工作原理
    • 4.gtid优缺点
  • 四、搭建主从复制
    • 1.两台机器分别安装mysql-rpm包
    • 2.检查两台机器my.cnf配置文件
    • 3.创建主从复制用户
    • 4.搭建主从
    • 5.验证
  • 五、主从复制原理
  • 总结


一、mysql-5.7.42RPM包构建

1、首先请查看顶部的系列文章目录,通过这篇文章构建出mysql的rpm安装包
2、接着将构建好的rpm包上传到服务器,至此安装包准备完毕,接下来搭建GTID同步模式的主从复制

二、同步模式分类介绍

1.异步同步模式

在这里插入图片描述

异步同步模式是 MySQL 默认的同步策略模式。
客户端在向服务端发送请求后,master处理完之后,直接返回客户端结果,接着在将对应的log信息发送给 slave节点。

异步同步模式缺点

主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接收并处理,
这样就会有一个问题,主库如果crash掉了,此时主库上已经提交的事务可能并没有传到从库上,
如果此时,强行将从提升为主,可能导致新的主库上数据不完整

2.半同步模式

在这里插入图片描述
半同步模式与异步同步的模式最大的区别

1、主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay_log中才返回给客户端
2、半同步模式也是基于异步复制的基础上进行的,无非是半同步模式需要安装异步插件完成

2.1.实现半同步操作流程

1、检测是否支持动态安装插件模式
mysql > select @@have_dynamic_loading; #返回YES为支持,反之不支持
2、在 master 上安装 master 对应的插件.slave节点也可以安装,此处不做示例
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; #执行安装
mysql >show global variables like 'rpl_semi%'; #查看安装插件后的参数配置
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | OFF        |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
+-------------------------------------------+------------+
3、master 服务器和 slave 服务器都开启主从复制插件功能
mysql > set global rpl_semi_sync_master_enabled=ON; #调整半同步插件参数值
mysql > show global variables like 'rpl_semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
| rpl_semi_sync_slave_enabled               | ON         |
| rpl_semi_sync_slave_trace_level           | 32         |
+-------------------------------------------+------------+
4、salve 节点半同步复制模式
mysql >stop slave io_thread;
mysql >start slave io_thread;
5、在 master 上查看 slave 信息。 
这里我们看到 Rpl_semi_sync_master_clients=1,则表示有一个 salve 节点连接上了
mysql > show global status like '%semi%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_status                | ON    |
+--------------------------------------------+-------+
15 rows in set
Time: 0.011s

2.2.半同步问题总结

问题解答
slave 节点响应 master 延迟当 master 发送给 slave 节点 binary log 之后,需要等待 slave 的响应。有时可能 slave 节点响应很慢,master 不能一直等待,这样会导致客户端请求超时情况,可以通过下面的参数进行设置。该参数的单位是毫秒,默认是 10 秒,推荐设置大一点。因为超时之后,master 会自动切换为异步复制。rpl_semi_sync_master_timeout
半同步模式自动转为异步同步模式上方提到了,如果超时之后,半同步模式会自动切换为异步复制模式。
master 接收 slave 节点数量,响应客户端。当 master 需要将 binary log 发送给多个 slave 节点时,如果 slave 节点存在多个,master 都要等待 slave 一一响应之后才回复客户端,这也是一个特别耗时的过程,可以通过下面的参数进行设置。rpl_semi_sync_master_wait_for_slave_count #默认是1
当半同步模式自动切换为异步之后,如何切换为半同步模式。这时候需要手动切换模式。就是关闭 io_thread,再开启 io_thread

2.3.半同步一致性

半同步复制模式极大程度上提高了主从复制的一致性。同时在 MySQL5.7+的版本增加了另外一个参数,
让复制的一致性更加可靠。这个参数就是rpl_semi_sync_master_wait_point,需要在 master 上执行。
mysql > set global rpl_semi_sync_master_wait_point = 'x';该参数有两个值。一个值是 AFTER_SYNC,一个值是 AFTER_COMMIT。默认是 AFTER_SYNC。区别如下表格所示
AFTER_COMMITmaster 在将事务写入 binary log 之后,然后发送给 slave。同时也会自动提交 master 的事务。等 slave 响应之后,master 接着响应给客户端信息。
AFTER_SYNCmaster 在将事务写入 binary log 之后,然后发送给 slave。等待 slave 响应之后,才会提交 master 的事务,接着响应给客户端信息。

2.4.异步与半同步对比

异步同步模式是直接返回给客户端在处理 slave 的问题,如果 master 响应给客户端成功信息,在处理 slave 问题时,服务挂掉了,此时就会出现数据不一致。
半同步模式需要等待 slave 节点做出响应,master 才会响应客户端,如果 salve 响应较慢就会造成客户端等待时间较长
半同步模式master 等待 slave 响应之后才会响应给客户端,此方式极大程度的保证了数据的一致性,为主从复制的数据一致性提供了更可靠的保证。也推荐使用该方式进行主从复制操作。

3.GTID同步

如下方所示

三、GTID同步介绍

1.gtid介绍

GTID是一种全局事务ID,它是在master上已经提交的事务,slave直接根据该ID进行复制操作。
该操作替代了binary log + postion的方式。使得主从复制的配置操作更加简单。

2.gtid组成

server-id不是MySQL配置文件中id,而是每一个MySQL服务在启动时,都会生成一个全局随机唯一的ID。transaction-id则是事务的ID,创建事务是会自动生成一个ID。

GTID = server-id + transaction-id组成

3.gtid工作原理

1、当一个事务在主库端执行并提交时,会产生GITD,一同记录到binlog日志中
2、binlog传输到slave,并存储到slave的relay-log(中继日志)中,,读取GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值
3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有该GTID
4、如果有记录,说明该GTID的事务已经执行,slave会忽略
5、如果没有记录,slave就会执行该GTID事务,并记录该GTID到自身的binlog。在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行。
6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描

4.gtid优缺点

优点缺点
根据 GTID 可以快速的确定事务最初是在哪个实例上提交的。必须确保主从库的引擎一致
简单的实现 failover,不用以前那样在需要找 log_file 和 log_pos。不允许一个SQL同时更新一个事务引擎和非事务引擎的表
更简单的搭建主从复制,确保每个事务只会被执行一次。/
比传统的复制更加安全,一个 GTID 在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。/
GTID是连续的没有空洞的,保证数据的一致性,零丢失/
GTID 用来代替classic的复制方法,不再使用 binlog+pos 开启复制。而是使用 master_auto_postion=1 的方式自动匹配 GTID 断点进行复制。/
GTID 的引入,让每一个事务在集群事务的海洋中有了秩序,使得 DBA 在运维中做集群变迁时更加方便/

四、搭建主从复制

环境准备

ip分类
192.168.56.130master
192.168.56.131slave

1.两台机器分别安装mysql-rpm包

这个rpm包就是第一步已构建好的rpm包

[root@mysql1 ~]# rpm -ivh city-mysql5.7.42-1-1.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...1:city-mysql5.7.42-1-1             ################################# [100%]
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
Datadir /export/servers/data/my3306 will been created,instance install will continue
Starting MySQL..... SUCCESS! 
Install successful!!!
The  Password of mysql user root is : 0gvzJr66iNs51. mysql进程可以使用systemctl启停;2. mysql未设置开机自启;3. mysql登陆方式:mysql -uroot -p -S /export/servers/data/my3306/run/mysqld.sock4. 建议修改root密码5. 参数文件中设置为只读(read_only=1 super_read_only=1),如需要请将参数值该为零。

2.检查两台机器my.cnf配置文件

因为在安装了构建好的rpm包后,my.cnf文件已经封装进去了,因此在安装后,只需要略微调试相关参数,即可使用。下方只列出了几个需要修改的重要参数,其余参数再次不展示
master节点

检查my.cnf文件中是否包含了开启gtid的相关参数
server_id               = 1   #自定义
log_bin                 = ON
binlog_format           = ROW
gtid_mode				= ON
enforce_gtid_consistency = ON
innodb_buffer_pool_size= 1G #根据服务器配置调整

slave节点

server_id               = 2 #自定义 与master不同即可
log_bin                 = mysql-bin
binlog_format           = ROW
gtid_mode				= ON
enforce_gtid_consistency = ON
log_slave_updates		= ON
read_only				= ON  #从库开启只读
super_read_only			= ON  #从库开启只读
innodb_buffer_pool_size= 1G #根据服务器配置调整

参数调整完成后,需要重启master-slave两个节点的MySQL,重启完成后,下一步就开始搭建主从关系

3.创建主从复制用户

登录主库执行

mysql > grant replication slave on *.* to 'repl'@'%' identified by '123456';
mysql >  flush privileges;

4.搭建主从

登录从库操作

mysql > reset master; 
mysql > change master to master_host='主库IP', master_port=主库端口,master_user='repl' ,master_password='xx' ,master_auto_position=1;
mysql > start slave; #开启主从复制
mysql > show slave status\G; #查看主从状态

当IO thread和SQL thrad 都为YES 说明主从搭建完毕

5.验证

登录主库操作

mysql> show master status;
+------------------+-----------+--------------+------------------+---------------------------------------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                                 |
+------------------+-----------+--------------+------------------+---------------------------------------------------+
| mysql-bin.010602 | 590048831 |              |                  | 52cf1b46-f308-11ec-a372-fa163e258462:1-1404783188 |
+------------------+-----------+--------------+------------------+---------------------------------------------------+
1 row in set (0.00 sec)

如上所示,主库已产生了binlog日志及记录了当前gtid执行的位置。至此基于GTID同步模式的主从复制搭建完成

五、主从复制原理

在这里插入图片描述

1、服务器开启二进制日志,主服务器会把sql操作记录通过多dump线程写入到主服务器的二进制日志中
2、从服务器的io 线程向主服务器二进制日志发送请求,master 服务器在接收到请求之后,根据偏移量将新的 binary log 发送给 slave 服务器。
3、slave 服务器收到新的 binary log 之后,写入到自身的 relay log 中,这就是所谓的中继日志
4、slave 服务器,单独开启一个 sql thread 读取 relay log 之后,写入到自身数据中

总结

本篇文章主要针对mysql5.7版本的同步模式分类、基于gtid同步模式搭建主从写的文章,对于mysql的构建安装过程可参考顶部的链接文章。希望这几篇文章可以帮助到大家

相关文章:

MySQL基于GTID同步模式搭建主从复制

系列文章目录 rpmbuild构建mysql5.7.42版本的rpm包 文章目录 系列文章目录一、mysql-5.7.42RPM包构建二、同步模式分类介绍1.异步同步模式2.半同步模式2.1.实现半同步操作流程2.2.半同步问题总结2.3.半同步一致性2.4.异步与半同步对比 3.GTID同步 三、GTID同步介绍1.gtid介绍2…...

RecyclerView的子项长按选择功能

在Android开发中,实现RecyclerView的子项长按选择功能通常涉及到几个关键步骤:设置RecyclerView的ItemTouchListener来监听长按事件,管理选中状态,以及更新UI以反映选中状态。以下是一个基本的实现步骤和示例代码。 1. 定义数据模…...

mongoDB-1

文章目录 一、疑似坑1.11.2 mongo ops manager1.3 mongo features视图固定大小集合(有点类似ringbuffer数据结构,capped collections)(聚簇集合)clustered collection(类比到Mysql的聚簇索引)聚合管道 aggregation pipelineWiredTiger (默认存…...

iKuai使用及设置流程

iKuai使用及设置流程 iKuai安装步骤 一、配置主机 1.电脑连接ETH0网口 2.ETH1网口连接猫上面的千兆口 3.手动配置pc的IP地址和192.168.1.1./24在同一网段 3.浏览器输入192.168.1.1 admin admin 二、外网设置 1.直接联通电信网络设置 2.点击 网络设置-内外网设置-点击接…...

【乐企-业务篇】销项开票接口声明(主要是业务对接)

我们系统销项对接了四家,所以抽象出来一个接口 专门用来定义销项相关的接口声明 代码如下 import java.util.List;/*** User: yanjun.hou* Date: 2024/9/4 10:07* Description:开票策略*/ public interface InvoiceStrategy {/*** 开票** @param order...

Pytest配置文件pytest.ini如何编写生成日志文件?

1、新建pytest.ini文件 [pytest] log_clitrue log_leveLNOTSET log_format %(asctime)s %(levelname)s %(message)s %(filename)s %(funcName)s %(lineno)d log_date_format %Y-%m-%d %H:%M:%Slog_file ./logdata/log.log log_file_level info log_file_format %(asctime…...

rust快速创建Tauri App ——基于create-tauri-app

Tauri App Tauri是一个工具包,可以帮助开发人员使用现有的几乎任何前端框架为主要桌面平台制作应用程序。核心是用Rust构建的,CLI利用Node.js使Tauri成为创建和维护优秀应用程序的真正多语言方法。 cargo install create-tauri-appcreate-tauri-app&am…...

【MySQL】MySQL中JDBC编程——MySQL驱动包安装——(超详解)

前言: 🌟🌟本期讲解Java中JDBC编程,希望能帮到屏幕前的你。 🌈上期博客在这里:【MySQL】MySQL索引与事务的透析——(超详解)-CSDN博客 🌈感兴趣的小伙伴看一看小编主页&a…...

电脑安装OpenWRT系统

通过网盘分享的文件:OpenWRT 链接: https://pan.baidu.com/s/1nrRBeKgGviD31Omji480qA?pwd9900 提取码: 9900 下面开始教程: 1.先把普通U盘制作成一个PE启动盘,我用的是微PE工具箱,直接安装PE到U盘。 2.把写盘工具和openWRT系统…...

说说几款耳机

从前,大约在戴森推出他们那款奇特的发明——戴森耳机与空气净化器组合一年后,人们仍对这个奇怪的产品感到困惑。这款穿戴式空气净化耳机更像是一个实验,缺乏实际用途。回想起那时的评测,大家一致认为这是有史以来最无意义的产品之…...

Excel爬虫使用实例-百度热搜

原来excel也能爬虫抓取数据,而且简单好用 目标网址: https://top.baidu.com/board?tabrealtime 下面是一个excel爬虫的小小例子,爬取了百度热搜的前50(还有一个置顶的热搜没有1,2,3编号) 实现…...

arcgisPro地理配准

1、添加图像 2、在【影像】选项卡中,点击【地理配准】 3、 点击添加控制点 4、选择影像左上角格点,然后右击填入目标点的投影坐标 5、依次输入四个格角点的坐标 6、点击【变换】按钮,选择【一阶多项式(仿射)】变换 7…...

SpringBoot开发——获取HTTP请求头(Header)的三种方法

文章目录 方法一:使用HttpServletRequest实现原理方法二:使用RequestContextHolder实现原理方法三:使用RequestHeader注解实现原理总结 在Spring Boot应用中,获取HTTP请求头(Header)信息是常见的需求&#…...

大模型入门3:理解LLAMA

LLama在transformers库中的代码,以及各部分原理Llama3.1技术报告LLama 33b 微调尝试 Model a stack of DecoderBlocks(SelfAttention, FeedForward, and RMSNorm) decoder block 整体结构:最大的区别在pre-norm x -> norm(x) -> attention() -…...

React学习day07-ReactRouter-抽象路由模块、路由导航、路由导航传参、嵌套路由、默认二级路由的设置、两种路由模式

14、ReactRouter续 (2)抽象路由模块 1)新建page文件夹,存放组件 组件内容: 2)新建router文件夹,在其下创建实例 3)实例导入,使用 4)效果 (3&…...

Unity项目的脚本继承关系

1.Unity项目的脚本继承关系包括四层:自己的脚本、MonoBehaviour、Behaviour、Component、Object。 2.通过F12跳转可以查看各继承类中的方法和属性,如MonoBehaviour类中主要包括协程和相关API。 3.Component类中包含组件的只读属性、消息发送等API&…...

【自动驾驶】决策规划算法(一)决策规划仿真平台搭建 | Matlab + Prescan + Carsim 联合仿真基本操作

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…...

grep 命令:文本搜索

一、grep 命令简介 ​grep ​命令用于在文件中搜索指定模式的文本,并显示匹配的行。 ‍ 二、grep 命令参数 匹配规则:可以是 普通字符 ​串或 正则表达式​。 grep [选项] [匹配规则] [指定目录]常用选项: ​-i, --ignore-case​&#…...

python画图|中秋到了,尝试画个月亮(球体画法)

学习了一段时间的画图,已经掌握了一些3D图的画法,部分链接如下: python画图|极坐标下的3D surface-CSDN博客 python画图|3D参数化图形输出-CSDN博客 我们今天尝试一下月亮的画法。 【1】官网教程 首先还是到达官网教程学习: …...

【网络安全的神秘世界】攻防环境搭建及漏洞原理学习

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 Kali安装docker 安装教程 PHP攻防环境搭建 中间件 介于应用系统和系统软件之间的软件。 能为多种应用程序合作互通、资源…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...

[特殊字符] 手撸 Redis 互斥锁那些坑

📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...