首先确保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更易维护,尤其适合高可用架构中的主从切换场景。