MySQL在线开启或禁用GTID模式
怎么入门数据库编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《MySQL在线开启或禁用GTID模式》,涉及到模式、MySQLGTID,有需要的可以收藏一下
基本概述
我们知道MySQL有2种方式指定复制同步的方式,分别为:
- 基于binlog文件名及位点的指定方式
- 匿名事务(Anonymous_gtid_log_event) - 基于GTID(全局事务ID)的指定方式
- GTID事务(Gtid_log_event)
而基于GTID的方式一方面在一主多从的架构下主从切换有着明显优势外,对于日常复制异常的故障诊断方面也更为方便,从MySQL 5.7.6之后便开始支持动态开启和关闭GTID模式,其参数GTID_MODE有以下取值
- OFF - 只允许匿名事务被复制同步
- OFF_PERMISSIVE - 新产生的事务都是匿名事务,但也允许有GTID事务被复制同步
- ON_PERMISSIVE - 新产生的都是GTID事务,但也允许有匿名事务被复制同步
- ON - 只允许GTID事务被复制同步
在线开启GTID
1. 设置GTID校验ENFORCE_GTID_CONSISTENCY为WARN
该操作的目的是允许在主库执行的SQL语句违反GTID一致性校验,且只在主库的错误日志中输出warning级别日志以作提醒,目的是为了考虑如果复制方式改为GTID模式后应用程序不会因为GTID的一些限制导致异常报错,
如:使用CREATE TABLE AS SELECT语法在GTID模式下不支持,而ENFORCE_GTID_CONSISTENCY设置为WARN时,只会在错误日志提示,不会直接报错,
## 该操作在主从库均执行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;
2. 设置GTID校验ENFORCE_GTID_CONSISTENCY为ON
观测一段时间(严谨的情况可能观测一天以上),确认上一个步骤未在错误日志中出现相关Warning信息后,正式开启GTID一致性校验,当设置为ON后,如果再执行CREATE TABLE AS SELECT语句则会直接报错
## 该操作在主从库均执行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
3. 设置GTID_MODE为OFF_PERMISSIVE
该操作是一个过渡属性,表示新产生的事务依旧是匿名事务,但也允许有GTID事务被复制同步
## 该操作在主从库均执行 SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
4. 设置GTID_MODE为ON_PERMISSIVE
该操作依旧是一个过渡属性,而其表示的则是新产生的都是GTID事务,但也允许有匿名事务被复制
## 该操作在主从库均执行 SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
5. (关键点)确保匿名事务回放完毕
该步骤的目的是确保在正式转换为完整的GTID模式前,老的匿名事务均以被回放完毕,确保GTID_MODE设置为ON时,不会因为残留的匿名事务导致复制同步报错,有以下2种方式进行校验
## 该操作仅在从库执行即可 ## 方式1:确保该状态值输出的匿名事务数显示为0(注意:只要出现过0即可表示已经转换完成,即使后续该状态值从0变为了大于0的值也不影响) SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT'; ## 在从库上多次执行该语句 ## 方式2: 查询该视图中LAST_SEEN_TRANSACTION可以观测当前同步的事务是否还存在ANONYMOUS事务 select * from performance_schema.replication_applier_status_by_worker;
确保匿名事务数为0
确保回放线程回放的事务都已是GTID事务
6. 触发一轮日志切换FLUSH LOGS
该操作的目的是为了在主库触发binlog的轮换,使新生成的binlog都是包含GTID的事务(防止一个binlog中包含2种类型的事务日志)
## 该操作仅在主库执行即可 FLUSH LOGS;
7. 正式开启GTID_MODE为ON
正式开启GTID
## 该操作在主从库均执行 SET @@GLOBAL.GTID_MODE = ON; SELECT @@GTID_MODE,@@ENFORCE_GTID_CONSISTENCY;
8. 修改配置文件确保GTID参数持久化
在my.cnf配置文件中增加GTID参数,确保重启不会失效,该操作也可在第一步进行
## 该操作在主从库均执行 gtid-mode = ON enforce-gtid-consistency = 1
9. 修改复制模式为GTID方式
将复制模式从基于POS点改为基于GTID
## 停止复制 STOP SLAVE; ## 修改为GTID模式 CHANGE MASTER TO MASTER_AUTO_POSITION = 1; ## 开启复制 START SLAVE; ## 观测复制同步状态 SHOW SLAVE STATUS\G
在线关闭GTID
方式类似于在线开启GTID的逆向操作,以下只写出步骤和具体命令,不做详细解释
- 先将GTID模式的复制改为基于POS点的复制
- 设置GTID_MODE为ON_PERMISSIVE
- 设置GTID_MODE为OFF_PERMISSIVE
- 观测GTID_OWNED状态变量变为空值及replication_applier_status_by_worker表中事务均转为匿名事务
- 触发FLUSH LOGS
- 设置GTID_MODE为OFF
- 设置ENFORCE_GTID_CONSISTENCY为OFF
- 修改my.cnf配置文件中GTID相关参数为OFF
1. 将复制改为基于POS点方式
stop slave; show slave status\G ## 取show slave status\G中的Master_Log_File和Exec_Master_Log_Pos填入 CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=224126137; start slave; show slave status\G
2. 设置GTID_MODE为ON_PERMISSIVE
## 该操作在主从库均执行 SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
3. 设置GTID_MODE为OFF_PERMISSIVE
## 该操作在主从库均执行 SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
4. (关键点)确保GTID事务回放完毕
观测GTID_OWNED状态变量变为空值及replication_applier_status_by_worker表中事务均转为匿名事务
## 该操作在从库执行即可 SELECT @@GLOBAL.GTID_OWNED; select * from performance_schema.replication_applier_status_by_worker;
5. 触发FLUSH LOGS
## 该操作在主库执行即可 FLUSH LOGS;
6. 设置GTID_MODE为OFF
## 该操作在主从库均执行 SET @@GLOBAL.GTID_MODE = OFF;
7. 设置ENFORCE_GTID_CONSISTENCY为OFF
## 该操作在主从库均执行 SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF;
8. 修改my.cnf配置文件中GTID相关参数为OFF
## 该操作在主从库均执行 gtid-mode = OFF enforce-gtid-consistency = 1
命令简版
1. 在线开启GTID
自行判断命令在主库还是从库执行
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN; SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON; SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE; SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT'; select * from performance_schema.replication_applier_status_by_worker; FLUSH LOGS; SET @@GLOBAL.GTID_MODE = ON; ## 配置文件修改 gtid-mode = ON enforce-gtid-consistency = 1 ## 将复制模式从基于POS点改为基于GTID STOP SLAVE; CHANGE MASTER TO MASTER_AUTO_POSITION = 1; START SLAVE; SHOW SLAVE STATUS\G
2. 在线关闭GTID
自行判断命令在主库还是从库执行
stop slave; show slave status\G ## 取show slave status\G中的Master_Log_File和Exec_Master_Log_Pos填入 CHANGE MASTER TO MASTER_AUTO_POSITION = 0, MASTER_LOG_FILE='mysql-bin.000017', MASTER_LOG_POS=224126137; start slave; show slave status\G SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE; SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; SELECT @@GLOBAL.GTID_OWNED; select * from performance_schema.replication_applier_status_by_worker; FLUSH LOGS; SET @@GLOBAL.GTID_MODE = OFF; SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF; ## 修改my.cnf配置文件中GTID相关参数为OFF gtid-mode = OFF enforce-gtid-consistency = 1
参考链接
https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online.html
https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online-enable-gtids.html
https://dev.mysql.com/doc/refman/5.7/en/replication-mode-change-online-disable-gtids.html
以上所述是小编给大家介绍的MySQL在线开启或禁用GTID模式,希望对大家有所帮助。在此也非常感谢大家对golang学习网网站的支持!
到这里,我们也就讲完了《MySQL在线开启或禁用GTID模式》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于mysql的知识点!

- 上一篇
- MySQL多版本并发控制MVCC深入学习

- 下一篇
- MySQL数据库索引order by排序精讲
-
- 数据库 · MySQL | 1天前 |
- MySQL设置中文界面,超简单教程来了!
- 332浏览 收藏
-
- 数据库 · MySQL | 1天前 | mysql 索引提示
- MySQL进阶必看!FORCE/USE/IGNOREINDEX用法大揭秘
- 182浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- 手把手教你写MySQL存储过程,小白也能轻松上手
- 163浏览 收藏
-
- 数据库 · MySQL | 2天前 | mysql group by
- MySQL分组查询优化:GROUPBY原理+索引优化超全解析
- 324浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- MySQL设置中文语言,轻松拥有中文界面
- 211浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- MySQL建库语句从入门到精通:创建数据库+设置字符集&排序规则(附实例)
- 176浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- 从零开始学MySQL数据库操作,小白轻松变大神!
- 496浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- MySQL插入日期到时间字段,轻松搞定日期格式
- 484浏览 收藏
-
- 数据库 · MySQL | 2天前 | mysql 数据压缩
- MySQL怎么实现高效压缩存储?表压缩+列式存储详细解读
- 272浏览 收藏
-
- 数据库 · MySQL | 2天前 | mysql JOIN优化
- MySQL优化JOIN操作:七大技巧教你提升关联查询速度
- 106浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- MySQL出现中文乱码?超详细解决方案一次性搞定
- 211浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- MySQL主从复制这样配!搞懂这些参数,replication稳了~
- 131浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 茅茅虫AIGC检测
- 茅茅虫AIGC检测,湖南茅茅虫科技有限公司倾力打造,运用NLP技术精准识别AI生成文本,提供论文、专著等学术文本的AIGC检测服务。支持多种格式,生成可视化报告,保障您的学术诚信和内容质量。
- 21次使用
-
- 赛林匹克平台(Challympics)
- 探索赛林匹克平台Challympics,一个聚焦人工智能、算力算法、量子计算等前沿技术的赛事聚合平台。连接产学研用,助力科技创新与产业升级。
- 50次使用
-
- 笔格AIPPT
- SEO 笔格AIPPT是135编辑器推出的AI智能PPT制作平台,依托DeepSeek大模型,实现智能大纲生成、一键PPT生成、AI文字优化、图像生成等功能。免费试用,提升PPT制作效率,适用于商务演示、教育培训等多种场景。
- 58次使用
-
- 稿定PPT
- 告别PPT制作难题!稿定PPT提供海量模板、AI智能生成、在线协作,助您轻松制作专业演示文稿。职场办公、教育学习、企业服务全覆盖,降本增效,释放创意!
- 53次使用
-
- Suno苏诺中文版
- 探索Suno苏诺中文版,一款颠覆传统音乐创作的AI平台。无需专业技能,轻松创作个性化音乐。智能词曲生成、风格迁移、海量音效,释放您的音乐灵感!
- 60次使用
-
- Go语言单例模式示例详解
- 2022-12-22 353浏览
-
- Go语言中的数据竞争模式详解
- 2023-01-01 456浏览
-
- golang实现简单工厂、方法工厂、抽象工厂三种设计模式
- 2022-12-31 158浏览
-
- goland使用go mod模式的步骤详解
- 2022-12-28 472浏览
-
- 分布式事务,原理简单,写起来全是坑!
- 2023-01-12 365浏览