首先确保 MySQL 版本支持 GTID,推荐使用 5.7 及以上版本;接着在主库配置文件中启用 enforce_gtid_consistency、gtid_mode 等参数并重启服务;然后在从库进行类似配置,设置唯一 server_id 和中继日志;之后在主库创建具有复制权限的用户;最后通过 mysqldump 导出主库数据并导入从库,完成数据同步。

在 MySQL 中启用 GTID(Global Transaction Identifier)复制可以简化主从复制的管理,避免因 binlog 位置不一致导致的问题。GTID 为每个事务分配唯一标识,使故障切换和节点重建更可靠。以下是配置 MySQL GTID 复制的详细步骤。
1. 确保 MySQL 版本支持 GTID
GTID 功能从 MySQL 5.6 开始引入,在 MySQL 5.7 和 8.0 中更加稳定。建议使用 MySQL 5.7 及以上版本进行配置。
2. 配置主库(Master)
编辑主库的 my.cnf 或my.ini配置文件 ,在[mysqld] 部分添加以下参数:
- enforce_gtid_consistency = ON:确保所有事务符合 GTID 要求
- gtid_mode = ON:启用 GTID 模式
- log_bin = mysql-bin:开启二进制日志
- log_slave_updates = ON:从库也将自己的更新写入 binlog(在级联复制中需要)
- binlog_format = ROW:推荐使用 ROW 格式以保证事务安全
- server_id = 1:设置唯一的服务器 ID(主从不能重复)
示例配置:
[mysqld]
server_id = 1
log_bin = mysql-bin
log_slave_updates = ON
binlog_format = ROW
enforce_gtid_consistency = ON
gtid_mode = ON
重启 MySQL 服务使配置生效。
3. 配置从库(Slave)
同样修改从库的配置文件,设置如下参数:
- server_id = 2:必须与主库不同
- relay_log = relay-bin:启用中继日志
- log_slave_updates = ON(可选)
- enforce_gtid_consistency = ON
- gtid_mode = ON
- binlog_format = ROW
重启从库 MySQL 服务。
4. 创建复制账号
在主库上创建用于复制的用户:
CREATE USER ‘repl’@’%’ IDENTIFIED BY ‘your_password‘;
GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’;
FLUSH PRIVILEGES;
5. 导出主库数据并导入从库
如果从库没有数据,需从主库导出当前状态:
mysqldump –all-databases –master-data=2 –single-transaction –routines –triggers –host=localhost > backup.sql
将备份文件传到从库并导入:
mysql -u root -p
注意:–master-data=2会在 dump 文件中生成 CHANGE MASTER 语句,包含 binlog 位置信息,但在 GTID 复制中我们不依赖它。
6. 启动 GTID 复制
登录从库 MySQL,执行 CHANGE MASTER 命令:
CHANGE MASTER TO
MASTER_HOST=’master_ip’,
MASTER_USER=’repl’,
MASTER_PASSWORD=’your_password’,
MASTER_PORT=3306,
MASTER_AUTO_POSITION = 1;
START SLAVE;
MASTER_AUTO_POSITION = 1是关键,表示使用 GTID 自动定位同步位置。
7. 检查复制状态
运行以下命令查看从库状态:
SHOW SLAVE STATUSG
关注以下字段:
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- Retrieved_Gtid_Set:已接收的 GTID 集合
- Executed_Gtid_Set:已执行的 GTID 集合
- Auto_Position: 1:确认启用了自动定位
若出现错误,检查错误信息并根据提示调整配置。
8. 验证 GTID 复制
在主库执行一个写操作:
CREATE DATABASE test_gtid;
USE test_gtid;
CREATE TABLE t1 (id INT);
INSERT INTO t1 VALUES (1);
登录从库,检查是否同步:
SHOW DATABASES; — 应看到 test_gtid
SELECT * FROM test_gtid.t1; — 应看到插入的数据
基本上就这些。只要主从配置正确、网络通畅、账号权限无误,GTID 复制就能正常运行。相比传统基于 binlog 文件 +position 的复制方式,GTID 更易维护,尤其适合 高可用架构 中的主从切换场景。






























