MySQL GTID(Global Transaction Identifier)配置需要在主从两端统一开启并确保参数一致,核心是启用GTID模式、禁用传统复制方式,并保证数据一致性。以下为实际可操作的关键步骤。
1. 检查MySQL版本与基础要求
GTID自MySQL 5.6.5起支持,但生产推荐使用5.7.6或8.0+版本。执行以下命令确认:
SELECT VERSION(); —— 查看当前版本 SHOW VARIABLES LIKE 'gtid_mode'; —— 查看是否已支持GTID 确保binlog_format = ROW,且log_bin已开启(GTID必须依赖二进制日志)2. 修改主从配置文件(my.cnf 或 my.ini)
在[mysqld]段统一添加以下参数(主库和从库都要配,但部分参数含义不同):
gtid_mode = ON enforce_gtid_consistency = ON(强制GTID安全,禁止不支持GTID的语句) log_bin = /path/to/mysql-bin(必须开启binlog) log_slave_updates = ON(从库也要记录relay log到自己的binlog,用于级联复制) server_id = 1(每台服务器必须唯一,主从不能重复)修改后重启MySQL服务生效。
3. 初始化GTID复制(主从首次搭建)
若为全新环境,可直接配置;若已有数据,需确保主从数据一致后再启GTID:
在主库执行:FLUSH TABLES WITH READ LOCK;,再记录SHOW MASTER STATUS;中的Executed_Gtid_Set 用mysqldump --all-databases --single-transaction --set-gtid-purged=ON导出(自动包含GTID信息) 从库导入后,执行:RESET SLAVE ALL; 清空旧复制信息 从库执行:CHANGE MASTER TO MASTER_HOST='xxx', MASTER_USER='repl', MASTER_PASSWORD='xxx', MASTER_AUTO_POSITION = 1;(关键:用MASTER_AUTO_POSITION = 1启用GTID自动定位) 启动复制:START SLAVE;,检查SHOW SLAVE STATUS\G中Seconds_Behind_Master和Retrieved_Gtid_Set/Executed_Gtid_Set是否同步4. 验证与日常维护要点
GTID配置成功后,应定期验证状态并注意常见问题:
查看GTID执行情况:SELECT @@global.gtid_executed; 跳过错误事务(慎用):SET GTID_NEXT='xxx-xxx-xxx:nnn'; BEGIN; COMMIT; SET GTID_NEXT='AUTOMATIC'; 避免混合使用GTID与基于文件位置的CHANGE MASTER语句 从库不能执行写操作(除非关闭read_only,但会破坏GTID一致性)GTID让故障切换、复制链路管理更可靠,但配置必须严谨,尤其enforce_gtid_consistency开启后会拒绝CREATE TEMPORARY TABLE等非安全语句,需提前评估应用兼容性。
