MySQL怎么开启或禁用GTID模式

发布时间:2021-11-29 09:05:25 作者:iii
来源:亿速云 阅读:728
# MySQL怎么开启或禁用GTID模式

## 一、GTID模式概述

### 1.1 什么是GTID

GTID(Global Transaction Identifier,全局事务标识符)是MySQL 5.6版本引入的重要特性,它为每个事务分配一个全局唯一的标识符。GTID的格式为:

source_id:transaction_id


其中:
- `source_id` 是产生事务的服务器UUID
- `transaction_id` 是一个递增的序列号

例如:`3E11FA47-71CA-11E1-9E33-C80AA9429562:23`

### 1.2 GTID的优势

1. **简化复制配置**:不再需要指定binlog文件和位置
2. **故障恢复更简单**:自动识别已执行的事务
3. **一致性保证**:确保从库不会重复应用事务
4. **主从切换更可靠**:轻松识别主从同步状态

### 1.3 GTID的局限性

1. 对非事务引擎(如MyISAM)支持有限
2. 某些特定操作(如临时表)在GTID模式下有特殊要求
3. 版本兼容性问题(MySQL 5.6+才完全支持)

## 二、开启GTID模式

### 2.1 准备工作

#### 环境检查

```sql
SHOW VARIABLES LIKE '%gtid%';
SHOW VARIABLES LIKE '%binlog%';
SHOW VARIABLES LIKE '%log_slave_updates%';

必要条件

  1. MySQL 5.6.5或更高版本
  2. 使用InnoDB存储引擎(推荐)
  3. 确保binlog_format=ROW(建议)

2.2 配置参数修改

在my.cnf或my.ini配置文件中添加以下参数:

[mysqld]
# 基本GTID配置
server_id = 1                # 必须唯一
gtid_mode = ON               # 开启GTID
enforce_gtid_consistency = ON # 强制GTID一致性

# Binlog相关配置
log_bin = mysql-bin
binlog_format = ROW          # 建议使用ROW格式
log_slave_updates = ON       # 从库记录binlog
binlog_group_commit_sync_delay = 100
binlog_group_commit_sync_no_delay_count = 10

2.3 分步骤启用流程

步骤1:以只读模式启动

SET @@GLOBAL.read_only = ON;

步骤2:逐步设置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;

步骤3:验证事务状态

SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
-- 确保返回值为0

步骤4:完全启用GTID

SET @@GLOBAL.GTID_MODE = ON;

步骤5:配置复制

STOP SLAVE;
CHANGE MASTER TO 
    MASTER_AUTO_POSITION = 1;
START SLAVE;

步骤6:恢复写入

SET @@GLOBAL.read_only = OFF;

2.4 验证GTID状态

SHOW VARIABLES LIKE 'gtid_mode';
SHOW VARIABLES LIKE 'enforce_gtid_consistency';

-- 查看已执行的GTID集合
SELECT @@GLOBAL.GTID_EXECUTED;

三、禁用GTID模式

3.1 禁用前的准备

  1. 确保所有从库已完全同步
  2. 备份重要数据
  3. 计划维护窗口

3.2 分步骤禁用流程

步骤1:停止复制

STOP SLAVE;

步骤2:改为基于位置的复制

-- 获取当前执行位置
SHOW MASTER STATUS;

CHANGE MASTER TO 
    MASTER_AUTO_POSITION = 0,
    MASTER_LOG_FILE = 'mysql-bin.000123',
    MASTER_LOG_POS = 456789;

步骤3:逐步关闭GTID

SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;

步骤4:验证状态

SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
-- 确保返回值为0

步骤5:完全禁用GTID

SET @@GLOBAL.GTID_MODE = OFF;
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF;

步骤6:修改配置文件

从my.cnf或my.ini中移除或注释GTID相关配置:

# gtid_mode = ON
# enforce_gtid_consistency = ON

步骤7:重启MySQL服务

systemctl restart mysql

四、常见问题解决方案

4.1 启用GTID时的常见错误

错误1:ENFORCE_GTID_CONSISTENCY警告

ERROR 1788 (HY000): Statement violates GTID consistency

解决方案: 1. 修改应用SQL,避免使用CREATE TEMPORARY TABLE和DROP TEMPORARY TABLE 2. 或将这些操作放在事务外部

错误2:临时表问题

解决方案

-- 使用事务内临时表
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF;
-- 执行临时表操作
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;

4.2 复制中断问题

问题1:主从GTID不一致

解决方案

-- 在从库上执行
SET GTID_NEXT='aaa-bbb-ccc:123';
BEGIN; COMMIT;
SET GTID_NEXT='AUTOMATIC';
START SLAVE;

问题2:从库跳过错误事务

STOP SLAVE;
SET @@GLOBAL.SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;

4.3 性能优化建议

  1. 增加binlog_group_commit_sync_delay值(微秒)
  2. 调整binlog_group_commit_sync_no_delay_count
  3. 监控gtid_executed表大小

五、生产环境最佳实践

5.1 升级策略

  1. 先在从库启用GTID,测试后再应用到主库
  2. 使用蓝绿部署策略
  3. 确保充分的回滚计划

5.2 监控指标

-- GTID状态监控
SHOW GLOBAL STATUS LIKE '%gtid%';

-- 复制延迟监控
SHOW SLAVE STATUS\G

5.3 备份恢复注意事项

  1. 使用mysqldump时添加--set-gtid-purged参数
  2. Percona XtraBackup需要特殊处理GTID
  3. 恢复时注意gtid_purged设置

六、总结

GTID模式显著简化了MySQL复制的管理和维护工作,但切换过程需要谨慎操作。本文详细介绍了GTID模式的启用和禁用步骤,以及常见问题的解决方案。在生产环境中实施时,建议:

  1. 先在测试环境验证
  2. 选择低峰期操作
  3. 准备详细的回滚方案
  4. 操作后密切监控系统状态

通过合理配置和使用GTID,可以大幅提高MySQL复制环境的可靠性和可维护性。


附录:常用GTID相关命令参考

-- 查看GTID执行情况
SELECT @@GLOBAL.GTID_EXECUTED, @@GLOBAL.GTID_PURGED;

-- 重置GTID执行历史
RESET MASTER;

-- 跳过特定GTID
STOP SLAVE;
SET GTID_NEXT='aaa-bbb-ccc:123';
BEGIN; COMMIT;
SET GTID_NEXT='AUTOMATIC';
START SLAVE;

版本兼容性说明: - MySQL 5.6.5+:基本GTID支持 - MySQL 5.7.6+:改进的GTID性能 - MySQL 8.0:进一步增强GTID可靠性 “`

推荐阅读:
  1. MySQL5.7.24 开启Gtid+MGR组复制
  2. MySQL5.7 - 基于GTID复制模式搭建主从复制

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql gtid

上一篇:css如何实现文字不透明背景半透明效果

下一篇:.Net性能测试框架Crank怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》