GTID详解
概念和组成
1,全局事务表示:global transaction identifiers
2, GTID和事务一一对应,并且全局唯一
3,一个GTID在一个服务器上只执行一次
4,mysql 5.6.5开始支持
组成
GTID = server_uuid:transaction_id 如:4855c186-ba02-11ef-8bf4-000c297511da:23
server_uuid 是集群唯一事务id是单调递增整数
查看方式1:select @@server_uuid
查看方式2:auto.cnf文件
GTID和binlog关系
2.1 Binlog构成

1, 版本信息,binlog metadata, etc
2, Previous_gtid_log_event: 用于表示当前binlog文件之前已经执行过的gtid集合,记录在Binlog文件头,如:4855c186-ba02-11ef-8bf4-000c297511da:1-23
3, GTID event 结构
假设有4个binlog: mysql-bin.000001 - mysql-bin.000004
mysql-bin.000001:Previous-GTIDs=empty; binlog_event:1-40
mysql-bin.000002:Previous-GTIDs=1-40; binlog_event:41-80
mysql-bin.000003:Previous-GTIDs=41-80; binlog_event:81-120
mysql-bin.000004:Previous-GTIDs=81-120; binlog_event:121-160
binlog中查看gtid
2.2 查找GTID=N 对应的binlog文件
1,假设我们要找GTID = N,那么MySQL的扫描顺序为: 从最后一个binlog开始扫描(即: mysql-bin.000004)
2,mysql-bin.000004 的previous-gtid = 1-120, 如果N = 140 > Previous-GTIDs,那么GTID = 140 肯定在mysql-bin.000004 中
3, mysql-bin.000004 的previous-gtid = 1-120, 如果N = 88 在 Previous-GTIDs 中,那么继续对比上一个binlog文件mysql-bin.000003,然后继续step2,直到找到为止
GTID复制协议
主从同步GTID过程
1, 从库向主库发送 COMBINLOGDUMP_GTID 命令,同时携带从库已经执行的 GTID 集合。
2,主库接收到请求后,会检查从库的 GTID 集合是否是主库 GTID 集合的子集
3,主库将从库缺失的事务发送给从库。
4, 从库接收到主库发送的事务后,执行这些事务,从而实现数据的同步。 同样的GTID不能被执行两次,如果有同样的GTID会自动skip。

传统复制和GTID对比
传统复制产生的问题

如果master 宕机,需要切换到slave1上,那么slave2就需要挂载到slave1上。由于同一个事物在每台机器上所在的binlog名字和位置不一样,那么如何找到slave2当前同步停止点对应Slave1上的master_log_file和master_log_pos位置就成为一个难点
GTID模式下的处理

由于一个事务的GTID在所有节点上一致,那么根据slave2 当前停止点的GTID就能定位到slave1上的GTID。 直接使用 CHANGE MASTER TO MASTER_HOST=‘xxx’, MASTER_AUTO_POSITION=1 命令就可以字节完成failover的工作
搭建GTID环境
从0开始搭建
配置主从my.cnf文件
创建复制账户
使用change master更新主从配置
传统复制升级为GTID复制
1,master和slave的my.cnf文件中添加下面配置
gtid_mode=ON
enforce_gtid_consistency=1
2, master设置为read_only模式,等待主从同步完毕
3, 一次重启master和slave 的mysqld服务,重启后可以看到gtid_mode是打开的
mysql> show global variables like '%gtid%';
+----------------------------------+------------------------------------------+
| Variable_name | Value |
+----------------------------------+------------------------------------------+
| binlog_gtid_simple_recovery | ON |
| enforce_gtid_consistency | ON |
| gtid_executed | 4855c186-ba02-11ef-8bf4-000c297511da:1-5 |
| gtid_executed_compression_period | 1000 |
| gtid_mode | ON |
| gtid_owned | |
| gtid_purged | |
| session_track_gtids | OFF |
+----------------------------------+------------------------------------------+
8 rows in set (0.01 sec)
4,使用change master更新主从配置
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.10.129',-> MASTER_USER='repl',-> MASTER_PASSWORD='abcd1234',-> MASTER_PORT=3358,-> MASTER_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.04 sec)
5, 验证
使用 show slave status\G 查看主从复制状态,如果Auto_Position: 1 即表示当前是GTID模式
Retrieved_Gtid_Set: Executed_Gtid_Set: 4855c186-ba02-11ef-8bf4-000c297511da:1-5Auto_Position: 1Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version:
1 row in set (0.00 sec)
如果要转回传统复制,则将这2行删除再重启即可
GTID相关参数
| Variable_name | VALUE | 含义 |
| enforce_gtid_consistency | ON | 保持GTID强一致 OFF:允许所有事务违反 GTID 一致性。 ON:没有事务允许违反 GTID 一致性。 WARN:所有事务允许违反 GTID 一致性,但会产生一个警告 |
| gtid_executed | 4855c186-ba02-11ef-8bf4-000c297511da:1-7 | 执行过的所有GTID |
| gtid_mode | ON | GTID开关模式 |
| gtid_owned | 正在运行的gtid | |
| gtid_purged | 4855c186-ba02-11ef-8bf4-000c297511da:1-6 | 丢弃掉的GTID,被清理的binlog中的gtid |
| gtid_next | AUTOMATIC | session级别变量,下一个要执行的gtid |
| binlog_gtid_simple_recovery | ON | 用于控制在 MySQL 启动时,如何遍历二进制日志文件(binlog)以寻找全局事务标识符(GTID) |
| gtid_executed_compression_period | 1000 | 1000用于控制压缩 mysql.gtid_executed 表的事务阈值数量 |
| session_track_gtids | OFF | 用于控制在会话中是否跟踪全局事务标识符(GTIDs) OFF:关闭 GTID 跟踪。 OWN_GTID:返回当前事务产生的 GTID。 ALLGTIDS:返回系统执行的所有 GTID,即 GTIDEXECUTED |
enforce_gtid_consistency 参数如果开启,则下面几种sql不允许执行
1,create table xx select statements
2,事务中 create/drop temporary table
3,同时更新事务引擎和非事务引擎
mysql> create table hero4 as select * from hero;
ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.
mysql>
相关文章:
GTID详解
概念和组成 1,全局事务表示:global transaction identifiers 2, GTID和事务一一对应,并且全局唯一 3,一个GTID在一个服务器上只执行一次 4,mysql 5.6.5开始支持 组成 GTID server_uuid:transaction_id 如…...
图解HTTP-HTTP状态码
状态码 状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。 类别原因短语1XXInformational(信息状态码)接收的请求正在处理2XXSuccess(成功状态码)请求正常处理完毕4XXRedirection (重定向状态码)需要…...
sh cmake-linux.sh -- --skip-license --prefix = $MY_INSTALL_DIR
本文来自天工AI --------- 命令用于安装CMake的脚本,其中--skip-license参数表示跳过许可协议的显示,--prefix参数指定了CMake的安装目录。$MYINSTALLDIR是一个环境变量,应该在运行命令之前设置为您想要安装CMake的目录。 -------- sh xx…...
MySQL 在window免安装启动
复制my.ini文件 初始化命令:mysqld --initialize --console 执行启动bat:启动mysql.bat 主要命令是:mysqld --standalone 免密码启动mysql: mysqld --defaults-file"D:\xxx\soft\mysql-8.0.40-winx64\my.ini" …...
[JavaScript] 我该怎么去写一个canvas游戏
首先你得知道canvas的基础语法,此处不过多赘述. 一、如何更新视图 canvas里面有个clearRect方法,可以遮住画布中一个矩形部分. 但是你想这样做就难免会遮住一些本不该遮住的东西,因为它是一个矩形,并且你还要计算它的位置和尺寸…...
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
目录 为什么要结合项目与算法? 1. 蓝桥杯与《苍穹外卖》项目的结合 实例:基于蓝桥杯算法思想的订单配送路径规划 问题描述: 代码实现:使用动态规划解决旅行商问题 代码解析: 为什么这个题目与蓝桥杯相关&#x…...
python报错系列(16)--pyinstaller ????????
系列文章目录 文章目录 系列文章目录前言一、pyinstaller ????????1.报错如下2.安装pyinstaller3.报错如下:4.封装py文件为exe成功5.国内源 总结 前言 一、pyinstaller ??? 1.报错如下 PS D:\Users\gxcaoty\Desktop\性能覆盖率> pyinstaller37.exe…...
Pytorch | 从零构建ResNet对CIFAR10进行分类
Pytorch | 从零构建ResNet对CIFAR10进行分类 CIFAR10数据集ResNet核心思想网络结构创新点优点应用 ResNet结构代码详解结构代码代码详解BasicBlock 类ResNet 类ResNet18、ResNet34、ResNet50、ResNet101、ResNet152函数 训练过程和测试结果代码汇总resnet.pytrain.pytest.py 前…...
Spring Boot 配置Kafka
1 Kafka Kafka 是由 Linkedin 公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统。 2 Maven依赖 <dependency><groupId>org.springframework.kafka</groupId><…...
基于单片机的火灾报警器 (论文+源码)
1.系统设计 本系统由火灾检测模块、A/D转换模块、信号处理模块、声光报警模块和灭火装置模块组成。火灾检测模块由温度检测和烟雾检测构成,其温度传感器选用DS18B20,烟雾传感器选用MQ-2烟雾传感器。A/D转换模块选用常用的模数转换芯片ADC0832。声光报警…...
分析excel硕士序列数据提示词——包含对特征的筛选,非0值的过滤
文章目录 1 分析出发点2 围绕出发点的文件分析3 功能模块计算重心相关性计算教学倾向百分比多列相关性计算结果封装证伪——过滤0后的交叉相关系数封装和总控——批量处理特征筛选——筛选提问倾向最大和最小的前五代码总的清洗1 分析出发点 写一个python代码,遍历"D:\Ba…...
MongoDB 更新文档
关于MongoDB更新文档的操作,可以通过多种方法实现。以下是一些常用的方法: updateOne() 方法:用于更新匹配过滤器的单个文档。其语法为 db.collection.updateOne(filter, update, options)。其中,filter 用于查找文档的查询条件&a…...
分布式协同 - 分布式事务_TCC解决方案
文章目录 导图Pre流程图2PC VS 3PC VS TCC2PC(Two-Phase Commit,二阶段提交)3PC(Three-Phase Commit,三阶段提交)TCC(Try-Confirm-Cancel)2PC、3PC与TCC的区别2PC、3PC与TCC的联系 导…...
MFC/C++学习系列之简单记录13
MFC/C学习系列之简单记录13 前言memsetList Control代码注意 总结 前言 今天记录一下memset和List control 的使用吧! memset memset通常在初始化变量或清空内存区域的时候使用,可以对变量设定特定的值。 使用: 头文件: C&#…...
PostgreSQL表达式的类型
PostgreSQL表达式是数据库查询中非常重要的组成部分,它们由一个或多个值、运算符和PostgreSQL函数组合而成,用于计算出一个单一的结果。这些表达式类似于公式,可以用查询语言编写,并用于查询数据库中的特定数据集。 PostgreSQL表…...
速通Python 第四节——函数
一、函数 编程中的函数和数学中的函数有一定的相似之处. 数学上的函数, 比如 y sin x , x 取不同的值, y 就会得到不同的结果. 编程中的函数, 是一段 可以被重复使用的代码片段 代码示例 : 求一段范围的数的和 , 不使用函数 # 1. 求 1 - 100 的和 sum 0 for i in range(1, …...
如何在Windows系统上安装和配置Maven
Maven是一个强大的构建和项目管理工具,广泛应用于Java项目的自动化构建、依赖管理、项目构建生命周期控制等方面。在Windows系统上安装Maven并配置环境变量,是开发者开始使用Maven的第一步。本文将详细介绍如何在Windows系统上安装和配置Maven࿰…...
STM32之GPIO输出与输出
欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 一.GPIO输入1.1GPIP简介1.2GPIO基本结构1.3GPIO位结构1.4GPIO的八种模式1.4.1浮空/上拉/下拉输入1.4.2 模拟输入1.4.3 推挽输出\开漏输出 二.GPIO输入2.1.按键介绍2.2传感器模块介绍2.3按键电路 一.G…...
linux定时器操作
目录 1 简单示例2 timer_create方式2.1 SIGEV_SIGNAL信号方式通知2.2 SIGEV_THREAD启动线程方式通知2.3 参数 1 简单示例 #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <signal.h> #include <unistd.h>void setup_t…...
重拾设计模式--观察者模式
文章目录 观察者模式(Observer Pattern)概述观察者模式UML图作用:实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题(Subject):具体主题(Concrete Subject…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...
当下AI智能硬件方案浅谈
背景: 现在大模型出来以后,打破了常规的机械式的对话,人机对话变得更聪明一点。 对话用到的技术主要是实时音视频,简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术,开发自己的大模型。商用方案多见为字节、百…...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...
作为点的对象CenterNet论文阅读
摘要 检测器将图像中的物体表示为轴对齐的边界框。大多数成功的目标检测方法都会枚举几乎完整的潜在目标位置列表,并对每一个位置进行分类。这种做法既浪费又低效,并且需要额外的后处理。在本文中,我们采取了不同的方法。我们将物体建模为单…...



