MySQL主从复制集群—gtid实现详解

老哥唠叨

上一篇发了 MySQL
主从复制集群搭建流程,不过好像小伙伴们对这个文章并不感兴趣,但是老哥出于对技术的热爱,和对小伙伴们的负责,我还是要写主从复制另一种实现方式: GTID
。这些技术真的蛮重要的,希望你们能学习。

GTID 简介

从 MySQL 5.6.5 版本新增了一种主从复制方式: GTID
,其全称是 Global Transaction Identifier
,即全局事务标识。通过 GTID
保证每个主库提交的事务在集群中都有唯一的一个 事务ID
。强化了数据库主从的一致性和故障恢复数据的容错能力。在主库宕机发生主从切换的情况下。 GTID
方式可以让其他从库自动找到新主库复制的位置,而且 GTID
可以忽略已经执行过的事务,减少了数据发生错误的概率。

GTID 组成

GTID
是对一个已经提交事务的编号,并且是全局唯一的。 GTID
是由 UUID
TID
组成的。 UUID
MySQL
实例的唯一标识, TID
代表该实例上已经提交的事务数量,随着事务提交数量递增。

举个例子: 3E11FA47-71CA-11E1-9E33-C80AA9429562:23
,冒号前面是 UUID
,后面是 TID

GTID 工作原理

  • 主库 master 提交一个事务时会产生 GTID,并且记录在 binlog 日志中

  • 从库 salve I/O 线程读取 master 的 binlog 日志文件,并存储在 slave 的 relay log 中。slave 将 master 的 GTID 这个值,设置到 gtid_next 中,即下一个要读取的 GTID 值。

  • slave 读取这个 gtid_next,然后对比 slave 自己的 binlog 日志中是否有这个 GTID

  • 如果有这个记录,说明这个 GTID 的事务已经执行过了,可以忽略掉

  • 如果没有这个记录,slave 就会执行该 GTID 事务,并记录到 slave 自己的 binlog 日志中。在读取执行事务前会先检查其他 session 持有该 GTID,确保不被重复执行。

  • 解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。

GTID实现

环境

这里我们准备两台机器,一主一从。

  • 主(master):192.168.216.111

  • 从(salve):192.168.216.222

master主库配置

[mysqld]
下配置,配置完需要重启

#GTID:
server_id=111  #服务器id,一般设置为机器 IP 地址后三位
gtid_mode=on  #开启gtid模式

#强制gtid一致性,开启后对于特定create table不被支持
enforce_gtid_consistency=on

#binlog
log_bin = 二进制日志文件存放路径
log-slave-updates=true

#强烈建议,其他格式可能造成数据不一致
binlog_format=row

#relay log
skip_slave_start=1
复制代码

slave从库配置

[mysqld]
下配置,配置完需要重启

#GTID:
gtid_mode=on #开启gtid模式
enforce_gtid_consistency=on

#服务器id,一般设置为机器 IP 地址后三位
server_id=222

#binlog
log-bin=slave-binlog
log-slave-updates=true

#强烈建议,其他格式可能造成数据不一致
binlog_format=row

#relay log
skip_slave_start=1
复制代码

检查GTID是否开启

show variables like '%gtid%';
复制代码
MySQL主从复制集群—gtid实现详解

主库建立授权用户

# 建立授权用户
GRANT REPLICATION SLAVE ON *.* TO '用户名'@'从机IP' IDENTIFIED BY '密码';
# 刷新MySQL的系统权限相关表
FLUSH PRIVILEGES;
复制代码

salve连接到master

CHANGE MASTER TO  
MASTER_HOST='master的IP',    
MASTER_USER='用户名',    
MASTER_PASSWORD='密码',    
MASTER_PORT=端口号,    
# 1 代表采用GTID协议复制
# 0 代表采用老的binlog复制
MASTER_AUTO_POSITION = 1;
复制代码

开启主从复制

start slave;
复制代码

查看slave状态

show slave status/G
复制代码

在master上查看salve信息

show slave hosts;
复制代码

MySQL主从复制集群—gtid实现详解
至此 GTID
主从复制方式搭建完毕,可以操作主库验证一下从库是否同步了数据。

IT 老哥


一个在大厂做高级Java开发程序猿

关注微信公众号:IT 老哥

回复:Java 全套教程,即可领取:Java 基础、Java web、JavaEE 全部的教程,包括 spring boot 等

回复:简历模板,即可获取 100 份精美简历

回复:Java 学习路线,即可获取最新最全的一份学习路线图

回复:Java 电子书,即可领取 13 本顶级程序员必读书籍

本文使用 mdnice
排版

原文 

https://juejin.im/post/5f17d48d6fb9a07eba0c8371

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » MySQL主从复制集群—gtid实现详解

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址