您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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%';
binlog_format=ROW
(建议)在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
SET @@GLOBAL.read_only = ON;
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';
-- 确保返回值为0
SET @@GLOBAL.GTID_MODE = ON;
STOP SLAVE;
CHANGE MASTER TO
MASTER_AUTO_POSITION = 1;
START SLAVE;
SET @@GLOBAL.read_only = OFF;
SHOW VARIABLES LIKE 'gtid_mode';
SHOW VARIABLES LIKE 'enforce_gtid_consistency';
-- 查看已执行的GTID集合
SELECT @@GLOBAL.GTID_EXECUTED;
STOP SLAVE;
-- 获取当前执行位置
SHOW MASTER STATUS;
CHANGE MASTER TO
MASTER_AUTO_POSITION = 0,
MASTER_LOG_FILE = 'mysql-bin.000123',
MASTER_LOG_POS = 456789;
SET @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
SHOW STATUS LIKE 'ONGOING_ANONYMOUS_TRANSACTION_COUNT';
-- 确保返回值为0
SET @@GLOBAL.GTID_MODE = OFF;
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF;
从my.cnf或my.ini中移除或注释GTID相关配置:
# gtid_mode = ON
# enforce_gtid_consistency = ON
systemctl restart mysql
ERROR 1788 (HY000): Statement violates GTID consistency
解决方案: 1. 修改应用SQL,避免使用CREATE TEMPORARY TABLE和DROP TEMPORARY TABLE 2. 或将这些操作放在事务外部
解决方案:
-- 使用事务内临时表
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = OFF;
-- 执行临时表操作
SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
解决方案:
-- 在从库上执行
SET GTID_NEXT='aaa-bbb-ccc:123';
BEGIN; COMMIT;
SET GTID_NEXT='AUTOMATIC';
START SLAVE;
STOP SLAVE;
SET @@GLOBAL.SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;
binlog_group_commit_sync_delay
值(微秒)binlog_group_commit_sync_no_delay_count
gtid_executed
表大小-- GTID状态监控
SHOW GLOBAL STATUS LIKE '%gtid%';
-- 复制延迟监控
SHOW SLAVE STATUS\G
--set-gtid-purged
参数gtid_purged
设置GTID模式显著简化了MySQL复制的管理和维护工作,但切换过程需要谨慎操作。本文详细介绍了GTID模式的启用和禁用步骤,以及常见问题的解决方案。在生产环境中实施时,建议:
通过合理配置和使用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可靠性 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。