文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL怎么开启或禁用GTID模式

2023-06-21 21:06

关注

这篇文章主要讲解了“MySQL怎么开启或禁用GTID模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL怎么开启或禁用GTID模式”吧!

基本概述

我们知道MySQL有2种方式指定复制同步的方式,分别为:

- 匿名事务(Anonymous_gtid_log_event)

- GTID事务(Gtid_log_event)

而基于GTID的方式一方面在一主多从的架构下主从切换有着明显优势外,对于日常复制异常的故障诊断方面也更为方便,从MySQL 5.7.6之后便开始支持动态开启和关闭GTID模式,其参数GTID_MODE有以下取值

在线开启GTID

1. 设置GTID校验ENFORCE_GTID_CONSISTENCY为WARN

该操作的目的是允许在主库执行的SQL语句违反GTID一致性校验,且只在主库的错误日志中输出warning级别日志以作提醒,目的是为了考虑如果复制方式改为GTID模式后应用程序不会因为GTID的一些限制导致异常报错,

如:使用CREATE TABLE AS SELECT语法在GTID模式下不支持,而ENFORCE_GTID_CONSISTENCY设置为WARN时,只会在错误日志提示,不会直接报错,

MySQL怎么开启或禁用GTID模式

## 该操作在主从库均执行SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = WARN;

2. 设置GTID校验ENFORCE_GTID_CONSISTENCY为ON

观测一段时间(严谨的情况可能观测一天以上),确认上一个步骤未在错误日志中出现相关Warning信息后,正式开启GTID一致性校验,当设置为ON后,如果再执行CREATE TABLE AS SELECT语句则会直接报错

MySQL怎么开启或禁用GTID模式

## 该操作在主从库均执行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

MySQL怎么开启或禁用GTID模式

确保回放线程回放的事务都已是GTID事务

MySQL怎么开启或禁用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                 = ONenforce-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的逆向操作,以下只写出步骤和具体命令,不做详细解释

  1. 先将GTID模式的复制改为基于POS点的复制

  2. 设置GTID_MODE为ON_PERMISSIVE

  3. 设置GTID_MODE为OFF_PERMISSIVE

  4. 观测GTID_OWNED状态变量变为空值及replication_applier_status_by_worker表中事务均转为匿名事务

  5. 触发FLUSH LOGS

  6. 设置GTID_MODE为OFF

  7. 设置ENFORCE_GTID_CONSISTENCY为OFF

  8. 修改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                 = OFFenforce-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                 = ONenforce-gtid-consistency  = 1## 将复制模式从基于POS点改为基于GTIDSTOP 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\GSET @@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相关参数为OFFgtid-mode                 = OFFenforce-gtid-consistency  = 1

感谢各位的阅读,以上就是“MySQL怎么开启或禁用GTID模式”的内容了,经过本文的学习后,相信大家对MySQL怎么开启或禁用GTID模式这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯