前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL集群搭建—GTID方式

MySQL集群搭建—GTID方式

作者头像
公众号 IT老哥
修改2020-09-21 15:29:05
1.7K0
修改2020-09-21 15:29:05
举报
文章被收录于专栏:用户7621540的专栏

本文源自 公-众-号 IT老哥 的分享

IT老哥,一个在大厂做高级Java开发的程序员,每天分享技术干货文章

老哥唠叨

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

GTID 简介

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

GTID 组成

GTID是对一个已经提交事务的编号,并且是全局唯一的。GTID是由UUIDTID组成的。UUIDMySQL实例的唯一标识,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]下配置,配置完需要重启

代码语言:javascript
复制
#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]下配置,配置完需要重启

代码语言:javascript
复制
#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是否开启

代码语言:javascript
复制
show variables like '%gtid%';

主库建立授权用户

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

salve连接到master

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

开启主从复制

代码语言:javascript
复制
start slave;

查看slave状态

代码语言:javascript
复制
show slave status\G

在master上查看salve信息

代码语言:javascript
复制
show slave hosts;

至此GTID主从复制方式搭建完毕,可以操作主库验证一下从库是否同步了数据。

云服务器云硬盘数据库(包括MySQL、Redis、MongoDB、SQL Server),CDN流量包,短信流量包,cos资源包,消息队列ckafka,点播资源包,实时音视频套餐,网站管家(WAF),大禹BGP高防(包含高防包及高防IP),云解析SSL证书,手游安全MTP移动应用安全云直播等等。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT老哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本文源自 公-众-号 IT老哥 的分享
  • 老哥唠叨
  • GTID 简介
  • GTID 组成
  • GTID 工作原理
  • GTID实现
    • 环境
      • master主库配置
        • slave从库配置
          • 检查GTID是否开启
            • 主库建立授权用户
              • salve连接到master
                • 开启主从复制
                  • 查看slave状态
                    • 在master上查看salve信息
                    相关产品与服务
                    云数据库 SQL Server
                    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档