首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MYSQL- GTID(全局事务标识符)

MYSQL- GTID(全局事务标识符)

作者头像
运维小路
发布2026-01-26 12:02:16
发布2026-01-26 12:02:16
850
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL(本章节)

PostgreSQL

MongoDB

Redis

Etcd

一. 什么是 GTID?

GTID(Global Transaction Identifier)是 MySQL 5.6 版本引入的全局事务标识符,它为复制环境中的每个事务分配一个全局唯一的标识符。

二. GTID 的组成

代码语言:javascript
复制
GTID = source_id:transaction_id
  • source_id: 服务器的 UUID,唯一标识一个 MySQL 实例
  • transaction_id: 事务序列号,从 1 开始递增
代码语言:javascript
复制
#示例
3E11FA47-71CA-11E1-9E33-C80AA9429562:1
3E11FA47-71CA-11E1-9E33-C80AA9429562:2
3E11FA47-71CA-11E1-9E33-C80AA9429562:3

三. GTID 的工作原理

1. 主库执行事务 2. 为事务生成 GTID 3. 将 GTID 和事务写入二进制日志 4. 从库读取 GTID 和事务 5. 从库应用事务并记录已执行的 GTID

四. GTID 的优势

1. 简化复制管理

代码语言:javascript
复制
-- 传统基于位置的复制
CHANGE MASTER TO
  MASTER_HOST='master1',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=107;

-- 基于 GTID 的复制
CHANGE MASTER TO
  MASTER_HOST='master1',
  MASTER_AUTO_POSITION=1;

2. 自动故障转移

  • 自动识别需要同步的事务
  • 无需手动计算日志位置

3. 一致性保证

  • 避免重复执行事务
  • 确保数据一致性
  • 简化主从切换

五. GTID 配置

代码语言:javascript
复制
# my.cnf 配置
[mysqld]
# 启用 GTID
gtid_mode=ON

# 强制 GTID 一致性
enforce_gtid_consistency=ON

# 服务器 ID
server_id=1

# 二进制日志配置
log_bin=mysql-bin
binlog_format=ROW
代码语言:javascript
复制
-- 检查 GTID 模式
SHOW VARIABLES LIKE 'gtid_mode';

-- 检查 GTID 一致性
SHOW VARIABLES LIKE 'enforce_gtid_consistency';

这样我们的就配置了GTID,每个事务都有一个事务ID。

代码语言:javascript
复制
mysql> SELECT @@GLOBAL.gtid_executed;
+----------------------------------------+
| @@GLOBAL.gtid_executed                 |
+----------------------------------------+
| a3558952-9176-11f0-b428-5254007ccb52:1 |
+----------------------------------------+
1 row in set (0.00 sec)

mysql> create database  abcde;
Query OK, 1 row affected (0.07 sec)

mysql> SELECT @@GLOBAL.gtid_executed;
+------------------------------------------+
| @@GLOBAL.gtid_executed                   |
+------------------------------------------+
| a3558952-9176-11f0-b428-5254007ccb52:1-2 |
+------------------------------------------+
1 row in set (0.00 sec)

六.主从配置

6.1 创建主从账号

代码语言:javascript
复制
-- 创建同步账号(用户名建议使用 repl,密码自定义,例如:Repl@123456)
CREATE USER 'repl'@'192.168.31.181' IDENTIFIED BY 'Repl@123456';
-- 授予复制权限(GTID 模式下需包含 REPLICATION SLAVE 和 REPLICATION CLIENT 权限)
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.31.181';
-- 刷新权限
FLUSH PRIVILEGES;

6.2 从库配置(主库参考上面配置)

代码语言:javascript
复制
[mysqld]
# 启用 GTID
gtid_mode = ON
enforce_gtid_consistency = ON
# 其他必要配置
server-id = 181  # 从库唯一 ID(与主库区分)
relay_log = /var/log/mysql-relay-bin.log  # 中继日志路径
read_only = ON  # 从库设为只读(可选,增强安全性)

6.3 从库连接主库

代码语言:javascript
复制
-- 停止从库进程(若已配置过)
STOP SLAVE;
-- 重置从库配置(首次配置可忽略,若需重新配置则执行)
RESET SLAVE ALL;
-- 配置主库信息(GTID 模式)
CHANGE MASTER TO
  MASTER_HOST = '192.168.31.180',  # 主库 IP
  MASTER_USER = 'repl',            # 同步账号用户名
  MASTER_PASSWORD = 'Repl@123456', # 同步账号密码
  MASTER_PORT = 3306,              # 主库 MySQL 端口(默认 3306)
  MASTER_AUTO_POSITION = 1;        # 启用 GTID 自动定位(无需指定日志文件名和位置)
-- 启动从库进程
START SLAVE;

如果主服务器开从一开始就启用了GTID,哪们无论是开始就配置主从或者中途配置主从,都不需要手工备份数据和记录Binglog位置。它会自动同步其中的数据。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB
  • 一. 什么是 GTID?
  • 二. GTID 的组成
  • 三. GTID 的工作原理
  • 四. GTID 的优势
  • 1. 简化复制管理
    • 2. 自动故障转移
    • 3. 一致性保证
  • 五. GTID 配置
    • 这样我们的就配置了GTID,每个事务都有一个事务ID。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档