MySQL基础笔记(15)-搭建基于GTID的MySQL主从复制架构

MySQL基于GTID同步模式搭建主从复制 异步同步模式是 MySQL 默认的同步策略模式。客户端在向服务端发送请求后,master处理完之后 , 直接返回客户端结果 , 接着在将对应的log信息发送给 slave节点。异步同步模式缺点主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主库如果crash掉了,此时主库上已经提交的事务可能并没有传到从库上,如果此时,强行将从提升为主,可能导致新的主库上数据不完整问题解答slave 节点响应 master 延迟。 阅读详情

一、为什么需要GTID

之前写过一篇文章介绍过基于日志点的MySQL的主从复制:https://blog.youkuaiyun.com/pbrlovejava/article/details/87002171#36SLAVE_89,
在使用的过程中发现有一些问题,最常见的问题在使用主主热备+主从复制+读写分离架构的过程中(读写分离可参考以前写的文章:https://blog.youkuaiyun.com/pbrlovejava/article/details/87886197
)会出现一种问题:

在这里插入图片描述

即Master1宕机后,若短时间无法恢复,此时的做法是停止Slave的IO线程,并且将Master2锁表只读,让其不要有新数据进来,然后需要更改Amoeba将Master2提升为主库,这些操作可以很快完成,但是接下来就遇到问题了:

我们需要去查看日志,判断Slave读取到Master1的哪些数据了,并且需要分析Master2日志,找出我们还需要同步的偏移量,这是个很复杂的过程,总是会存在数据的漏失。 那么应该如何解决这个问题呢?是否可以在故障切换时,无需在Slave中指定Master的同步位置,或者可以自动判断需要从哪里开始同步呢?

至此,为什么需要GTID的原因已经告诉大家了,GTID的出现很好地解决了主从切换时的日志定位问题,使我们无需再通过master_log_file和master_log_pos去定位复制起点。

二、GTID是什么

2.1、GTID的组成

GTID即Global Transaction ID,全局事务ID,它是MySQL5.6版本出现的一种由特定标识组成的字符串,它长这个样子:

a7df186b-38de-11e9-9452-0242ac110007:1-42

GTID可以通过show master status查看,它由两部分组成,第一部分是MySQL服务器ID,可通过以下命令查看

mysql> show variables like 'server_uuid';
+---------------+--------------------------------------+
| Variable_name | Value                                |
+---------------+--------------------------------------+
| server_uuid   | a7df186b-38de-11e9-9452-0242ac110007 |
+---------------+--------------------------------------+
1 row in set (0.01 sec)

这个uuid是全球唯一的,即百年内不会过期和重复,所以可以确定一台唯一的MySQL服务器,一般将其存储在mysql数据目录的auto.cnf文件中。

而组成GTID的第二部分被称为事务ID,它随事务的产生而递增,即每条事务会对应一个事务ID,那么,GTID的性质显而易见:它能标识全球范围内任一台MySQL数据库中的任一事务。

2.2、基于GTID的主从复制原理

在这里插入图片描述

我个人理解,基于GTID的MySQL复制流程为:

1、Master写入记录前生成一个GTID
2、Master将GTID和数据一起写入二进制日志中
3、Master刷新日志数据到磁盘中
4、Slave读取Master的二进制日志中的GTID
5、Slave判断该GTID是否已经写入中继日志,如果写入了则说明该GTID代表的数据已经存在,跳过该条数据不将其重复录入到中继日志中
6、Slave继续往下读取Master二进制日志,直到读取到Slave中继日志中不存在的GTID即开始将其写入Slave中继日志,SQL线程启动,开始刷新数据到Slave磁盘中
7、复制过程结束

这样就可以避免Slave中漏写Master的数据或者重复写入。

三、开始配置

3.1、准备Docker的MySQL服务

这一步已经在前面的文章中讲过了,这里不再赘述:
https://blog.youkuaiyun.com/pbrlovejava/article/details/87002171#36SLAVE_89

3.2、三个重要参数

要使用GTID,一定要在主从库中都设置者三个参数:

  • gtid_mode=on
    这个参数用于开启gtid模式

  • enforce_gtid_consistency=on
    安全相关测试

  • log_slave_updates=on
    这个参数作用很大,它解决了双主一从架构中的从库数据与主库数据不一致问题,当Slave的主库为Master1时,Master2和Master1互为主主热备架构,Master2更新了数据之后,Master1也更新了数据,但是此时Master1的更新记录保存在中继日志中,二进制日志中并没有记录下来,所以Slave无法读取到更新,这就造成了更新丢失问题,而且最坑的是这个参数默认是关闭的,所以在这里我们需要将其开启。

3.3、主库配置

修改主库配置:

vi /etc/mysql/my.cnf

在这里插入图片描述

3.4、从库配置

在这里插入图片描述

3.5、在主库中创建用于主从复制的账号
mysql> grant replication slave,replication client on *.* to 'slave'@'%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

四、开启主从复制

登陆从库,开启主从复制,此时已经不需要指定master_log_file和master_log_pos了,而是通过参数master_auto_position=1去指定自动找到GTID进行复制。

mysql> change master to
    -> master_host='172.17.0.7',
    -> master_port=3306,
    -> master_user='slave',
    -> master_password='123',
    -> master_auto_position=1;
Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G
*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                 Master_Host: 172.17.0.7
                 Master_User: slave
                 Master_Port: 3306
               Connect_Retry: 60
             Master_Log_File: mysql5.000001
         Read_Master_Log_Pos: 47823
              Relay_Log_File: mysql5.000002
               Relay_Log_Pos: 48030
       Relay_Master_Log_File: mysql5.000001
            Slave_IO_Running: Yes
           Slave_SQL_Running: Yes
             Replicate_Do_DB: 
         Replicate_Ignore_DB: 
          Replicate_Do_Table: 
      Replicate_Ignore_Table: 
     Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
                  Last_Errno: 0
                  Last_Error: 
                Skip_Counter: 0
         Exec_Master_Log_Pos: 47823
             Relay_Log_Space: 48228
             Until_Condition: None
              Until_Log_File: 
               Until_Log_Pos: 0
          Master_SSL_Allowed: No
          Master_SSL_CA_File: 
          Master_SSL_CA_Path: 
             Master_SSL_Cert: 
           Master_SSL_Cipher: 
              Master_SSL_Key: 
       Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
               Last_IO_Errno: 0
               Last_IO_Error: 
              Last_SQL_Errno: 0
              Last_SQL_Error: 
 Replicate_Ignore_Server_Ids: 
            Master_Server_Id: 201
                 Master_UUID: a7df186b-38de-11e9-9452-0242ac110007
            Master_Info_File: /var/lib/mysql/master.info
                   SQL_Delay: 0
         SQL_Remaining_Delay: NULL
     Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
          Master_Retry_Count: 86400
                 Master_Bind: 
     Last_IO_Error_Timestamp: 
    Last_SQL_Error_Timestamp: 
              Master_SSL_Crl: 
          Master_SSL_Crlpath: 
          Retrieved_Gtid_Set: a7df186b-38de-11e9-9452-0242ac110007:1-44
           Executed_Gtid_Set: a7df186b-38de-11e9-9452-0242ac110007:1-44,
dfdeb837-3b3a-11e9-a07f-0242ac110008:1-5
               Auto_Position: 1
        Replicate_Rewrite_DB: 
                Channel_Name: 
          Master_TLS_Version: 
1 row in set (0.00 sec)

至此,基于GTID的MySQL主从复制已经成功了,当然这只是基础的入门而已,还有许多线上问题需要去积累经验、勤于反思才能解决,还有许多东西可以深入地学习。

MySQL 8.0 GTID 搭建主从复制 一、环境介绍 虚拟机:Oracle VM VirtualBox 5.0.24 操作系统:CentOS Linux release 7.7.1908 (Core) MySQL服务器:8.0.11 MySQL Community Server - GPL 软件下载地址 主从方式:基于GTID的搭建 主从同步方式:异步复制(也可使用半同步复制) master_ip:192.168.56.101 slav... 阅读详情

相关推荐

MySQL主从复制之基于GTID及多线程

一、Mysql 5.6 复制管理工具 官方下载:http://dev.mysql.com/downloads/tools/utilities/#downloads mysqlreplicate 快速启动复制 mysqlrplcheck 快速检查复制环境 mysqlrplshow 显示复制拓扑 mysqlfailover 故障转移 mysqlrpladmim 管理工具 二、GTID详解

Celeste7777的博客 3651

MySQL主从复制(基于GTID--事务ID方式)

意思是: 当前数据库实例中开启了 GTID 功能, 在开启有 GTID 功能的数据库实例中, 导出其中任何一个库, 如果没有显示地指定–set-gtid-purged参数, 都会提示这一行信息。意思是默认情况下, 导出的库中含有 GTID 信息, 如果不想导出包含有 GTID 信息的数据库, 需要显示地添加–set-gtid-purged=OFF参数。因此,即使在使用基于 GTID 的主从复制的情况下,也需要开启二进制日志,以便记录和复制数据更改,支持故障恢复,以及存储 GTID 信息。

一个认真学习的女孩子的博客 3835

Gtid方式搭建主从复制+MHA高可用集群

GTID方式搭建的主从复制集群,无法实现高可用性,使用开源工具MHA来实现mysql主从复制的高可用性,用来简化mysql高可用的部署和管理。

2302_77503226的博客 1113

mysql基于GTID主从复制

mysql GTID主从复制

zwjzone的博客 1552

Windows服务器XMRig挖矿病毒深度清除实战指南

XMRig是一种广泛用于Monero(XMR)加密货币挖矿的开源工具,其在Windows环境中的持久化机制已远超传统木马范畴,融合WMI事件订阅、服务伪装、PowerShell无文件执行与注册表隐写等多重反检测技术。理解其基于行为而非特征的生存逻辑,是实现有效检测与根除的前提。该技术具备强隐蔽性、高自愈性与网络通信合法化特征,常见于RDP弱口令爆破、SMB共享泄露及PowerShell远程执行等非漏洞类入侵场景。本文聚焦Windows原生命令与Sysinternals工具链,提供覆盖进程定位、WMI清理、服

weixin_30535843的博客 735

告别第三方工具!用Windows自带蓝牙玩转BLE设备调试(保姆级图文教程)

本文详细介绍了如何利用Windows自带的蓝牙功能进行BLE设备调试,无需第三方工具。从硬件准备、系统配置到实战操作,提供保姆级图文教程,帮助开发者高效完成设备发现、数据交互等全流程调试工作。特别适合物联网开发者和智能硬件爱好者。

o5p6q的博客 735

MySQL主从复制【基于GTID复制】

MySQL主从复制【基于GTID复制】1、GTID复制简介2、GTID复制运行过程3、GTID复制开启参数4、示例1)环境准备2)初始化数据【重置所有数据(方便实验)】3)配置主库4)配置从库5)测试6)查看GTID 1、GTID复制简介 在主从同步时 GTID_Event 和事务的 Binlog 会一起传递到从库,由中继日志接收,从库在执行的时候使用对应的 GTID 写 binlog;主从同步以后,可以通过 GTID 确定从库目前同步的位置了。 【简单来说:可以通过 GTID 自动找点,无需像之前那样通过

JohnnyG2000的博客 2622

单片机如何获得5V电源

在单片机实际设计中,有时会需要在电路中用到5V电压源,那么这个常见的实验需求有哪些办法解决呢,我综合网上的资料,概括一下: 1)USB    这种方法在我们直接将单片机板与电脑连接调试的时候,算是简单又方便的办法了,但如果我所要得到的成品不直接连接外部的器件,这就得舍弃。     常用的,USB/5V插头线,这是一种专门的电源线,一端是USB通用接口,可以直插USB端口,另一端是内正外负电压

Echo_Ana的博客 3万+

MYSQL数据库GTID实现主从复制(超级方便)

一、添加Maria源 vi /etc/yum.repos.d/MariaDB.repo 粘贴阿里云的最新mariadb镜像: [mariadb] name = MariaDB baseurl = https://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/ gpgkey=https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck=1 安装新版本的MariaDB yum in

暴躁程序员的博客 2829

Error: dependent ‘..\..\..\..\Qt\5.15.2\msvc2019\include\QtWidgets\QMainWindow‘ does not exist.

核心问题:修改 Build 目录为源码子目录后,MSVC 编译报错,本质是变量设置异常,导致 qmake 生成多余回溯路径;临时解决:在 .pro 文件添加;最优解决:将上述配置写入 Qt 的 msvc 对应 qmake.conf 全局文件,一劳永逸;禁止 qmake 计算路径时向上回溯,避免生成异常路径。

mumufan05的专栏 878

安卓13禁止待机 永不休眠 android13永不休眠

设置 =》显示 =》屏幕超时 =》 永不。我们通过修改系统待机时间配置,来达到设置屏幕超时的配置。像网上好多文章都只写了在哪里改,改什么东西,但是实际上并未写明为什么要改那个地方,怎么来的。这个文章描述了,怎么处理类似的问题。

zhutoubenben的专栏 1099

mysql主从配置及搭建(gtid方式)

【代码】mysql主从配置及搭建(gtid方式)

xdy762024688的博客 2134

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息

本文记录的是基于MobileNet V4的YOLOv11目标检测轻量化改进方法研究。其中MobileViT块旨在以较少的参数对输入张量中的进行建模,结合卷积与 Transformer 的优势,并实现有效的信息编码与融合本文配置了原论文中和三种模型,以满足不同的需求。

Limiiiing的博客 1075

MySql GTID主从复制

目录 1.GTID介绍 1.1GTID是什么 1.2 GTID Replication介绍 1.3 GTID的组成 1.4GTID的作用 1.5为什么要用GTID 1.6GTID比传统复制的优势 1.7GTID复制实现的工作原理 2 主从复制 2.1 一主一从 2.1.1部署数据库可查看 2.1.2 授权一个用户,用于主从复制主从> 2.1.3 修改master主配文件 2.1.4 slave主配文件 2.1.5 配置slave主机,授权从数据库 2.1.6 验证主...

花飘万家雪 5591

12306自动抢票系统:基于DrissionPage的智能购票实战

摘要:本文介绍了一个基于DrissionPage的12306自动抢票系统实现方案。该系统通过模拟真实用户操作,实现了车票查询、登录认证、座位选择和订单提交的全流程自动化。项目采用DrissionPage库替代传统Selenium方案,具有更简洁的API设计和更好的性能表现。核心技术包括数据包监听、动作链模拟和反爬虫应对策略,实现了高效可靠的车票抢购功能。系统包含完整的业务流程设计,从环境初始化到最终订单提交,并提供了清晰的数据展示界面。本文强调该项目仅用于技术研究,在实际使用中应严格遵守12306平台规则

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 2793

120、NPU的Mythic M1076:模拟存算一体NPU

这篇文章分享了作者调试Mythic M1076模拟存算一体NPU的实战经验,主要包含以下要点: 硬件设计陷阱:参考电压输入必须使用低ESR电容,普通贴片电容会导致模拟计算阵列工作异常。 核心技术原理: 采用真正的存算一体架构,将权重存储为模拟电压 使用浮栅晶体管存储权重,通过电流叠加实现乘法运算 包含108个计算单元阵列(Tile),每个256×256规模 使用注意事项: 编程模型特殊,需要依赖SDK自动映射网络层 存在6-8位有效精度限制,需用量化感知训练 功耗特性独特,静态偏置电流占主要功耗 调试手段有

m0_50546716的博客 125

【mysql】GTID主从复制

一、基于GTID的主从复制    1.什么是GTID    2.GTID主从复制的优点    3.GTID主从复制的缺点    4.搭建GTID主从复制    5.GTID复制和传统复制的区别

zerotoall的博客 1456

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

MySQL - 主从复制进阶:GTID 复制的配置与故障转移

MySQL主从复制进阶:GTID复制配置与故障转移 摘要:本文深入讲解MySQL GTID复制的原理与配置方法,分析其相比传统复制的优势。通过1主2从架构演示GTID环境搭建步骤,详细介绍故障转移流程。文章提供Java实现自动故障转移的代码方案,结合HikariCP实现主库动态切换。包含GTID验证命令、复制状态检查、拓扑变更注意事项等实用技巧,帮助开发者构建高可用MySQL架构。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MySQL主从复制之GTID复制

MySQL主从复制之GTID复制 原文: https://www.cnblogs.com/hmwh/p/9198705.html GTID复制又叫...

小麦苗DBA宝典 2576

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【MySql】 搭建主从复制

主从复制是指将主库的数据变更同步到从库,从而保证主库和从库数据一致,可用于数据备份、失败迁移、读写分离、降低单库读写压力等场景。对于面向大企业的B端产品而言,主从复制技术尤为重要。

精益求精 2037

MySQL 基于 GTID 模式的主从复制

MySQL主从复制通过GTID模式实现更高效的数据同步。GTID(全局事务标识符)以source_id:transaction_id格式唯一标识事务,相比传统基于位点的复制具有自动定位、故障恢复简单等优势。文章详细介绍了GTID的工作原理及优缺点,并提供了从传统位点模式在线切换到GTID模式的完整步骤,包括Docker环境搭建、主从配置修改和一致性设置等关键操作。GTID模式虽存在存储引擎一致性等限制,但能有效解决传统复制中数据不一致等问题,是MySQL高可用架构的重要实现方式。

weixin_45103378的博客 1018

MySQL 基于 GTID 主从复制

GTID 是 MySQL事务标识,为每一个提交的事务都生成一个标识,并且是全局唯一的,这个特性是从MySQL5.6引进的。

weixin_68243500的博客 1389

MySQL主从复制之GTID模式

GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的Binlog。主从同步时GTID_Event和事务的Binlog 都会传递到从库,从库在执行的时候也是用同样的GTID写binlog,这样主从同步以后,就可通过GTID确定从库同步到的位置了。

weixin_68398469的博客 4182

Mysql配置主从复制-GTID模式

是指把数据从一个Mysql服务器(主节点)复制到一个或多个Mysql服务器(从节点)中,会把主节点服务器中的所有数据库实例、特定数据库实例或特定表等,全部复制到从节点服务器中。

weixin_45151960的博客 2229

基于GTID的主从复制

slave 无需知道 master 的 pos 值和日志文件值,只需要知道 master 的 ip、用户名、密码即可;如果没有记录,slave 就会从 relay log 中执行该 GTID 的事务,并记录到 binlog。slave 端的 I/O 线程将变更的 binlog,写入到本地的relay log(中继日志)中。如果有记录,说明该 GTID 的事务已经执行,slave 会忽略。GTID 是连续的没有空洞的,保证数据的一致性,零丢失。# 开启GTID的⼀些安全限制,添加此⾏。比传统的复制更加安全。

weixin_75145375的博客 892

MySQL主从复制(七):GTID

GTID(Global Transaction Identifier)是MySQL 5.6及以后版本中引入的一个关键特性,用于在MySQL的复制架构中实现全局唯一的事务标识。GTID以事务为单位管理复制,不再需要靠log_file和log_pos来定位复制位置,在主从切换、故障恢复时更加简单。

热爱数据库的小胖 1401
上一篇: MySQL基础笔记(14)-使用Amoeba和Docker搭建MySQL读写分离架构
下一篇: JAXB工具类
BoringRong
BoringRong 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 2万+粉丝 386原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoringRong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值