MySQL集群搭建—GTID方式
本文源自 公-众-号 IT老哥 的分享
IT老哥,一个在大厂做高级Java开发的程序员,每天分享技术干货文章
老哥唠叨
上一篇发了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%';
主库建立授权用户
# 建立授权用户
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 statusG
在master上查看salve信息
show slave hosts;
至此GTID
主从复制方式搭建完毕,可以操作主库验证一下从库是否同步了数据。
云服务器,云硬盘,数据库(包括MySQL、Redis、MongoDB、SQL Server),CDN流量包,短信流量包,cos资源包,消息队列ckafka,点播资源包,实时音视频套餐,网站管家(WAF),大禹BGP高防(包含高防包及高防IP),云解析,SSL证书,手游安全MTP,移动应用安全、 云直播等等。
- 这次真的忽略了一些ActiveMQ内心的娇艳
- 多线程编程:阻塞、并发队列的使用总结
- 多线程编程:多线程并发制单的开发记录【一】
- 如何使用线程锁来提高多线程并发效率
- 如何在分布式环境中同步solr索引库和缓存信息
- 如何在分布式环境中同步solr索引库和缓存信息
- Info模式下的隐形杀手(SpringMVC同时使用<mvc:resources.../>和FormattingConversionServiceFactoryBean时出现的问题)
- 关于web.xml3.0启动报错
- [机器学习]-[数据预处理]-中心化 缩放 KNN(一)
- 信息安全不可或缺应用交付 还需安全交付
- 一张图带你看懂区块链项目生态
- python环境的安装
- python爬虫抓取网易云音乐歌词
- 区块链学堂——“遇见”拜占庭将军
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Android 实现单线程轮循机制批量下载图片
- Android开发之项目模块化实践教程
- Linux centos7 下安装 phpMyAdmin的教程
- 简单学习Android TextView
- Android 滑动返回Activity的实现代码
- centos7搭建hadoop2.10高可用(HA)
- 在 React 中实现 keep alive(可参与文末讨论哦)
- Android仿淘宝切换商品列表布局效果的示例代码
- android 右滑返回的示例代码
- 关于linux服务器hosts文件配置详解
- android中Glide实现加载图片保存至本地并加载回调监听
- CentOS8部署LNMP环境之编译安装mysql8.0.29的教程详解
- Android获取内置sdcard跟外置sdcard路径
- Android简易电话拨号器实例详解
- Linux 为特定的用户或用户组启用或禁用 SSH的方法