千家信息网

MySQL怎么开启或禁用GTID模式

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"MySQL怎么开启或禁用GTID模式",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"MySQL怎么开启或禁用GTID模式"吧!基本概
千家信息网最后更新 2026年11月02日MySQL怎么开启或禁用GTID模式

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

    基本概述

    我们知道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                 = 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模式这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

    事务 模式 主从 方式 同步 文件 参数 日志 观测 配置 状态 在线 命令 新产 目的 步骤 语句 错误 学习 一致 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州淘业互联网络科技 互联网科技网 互联网科技活动banner 互联网金融与金融科技 为想互联网科技 万易互联网科技有限公司 有木互联网科技 互联网 视角下的科技创新 海南购全球互联网科技 衡水科技产业互联网平台 安控科技rtu产品工业互联网 重庆威客帮互联网科技 南山科技园互联网公司有哪些 未来五年的互联网科技 民营互联网公司国防科技 工业互联网展湾科技股份有限公司 国大互联网教育科技有限公司薪资 广州梦谷互联网科技有限公司领导 北京互联网科技类企业分布 互联网科技创新方面的资料 狮子座互联网科技有限公司 互联网 科技馆 恒生互联网科技指数跳水 互联网公司黑科技创始人 半导体是互联网高科技吗 下一代互联网重大应用科技园 半导体行业属于互联网高科技类吗 江苏互联网科技小贷 悟空问答互联网科技 广州三三互联网科技有限公司
    0