MySQL 5.7基于GTID的主从复制怎么配置?

文章导读
MySQL 5.7 配置 GTID 主从复制需在主从节点 my.cnf 中开启 gtid_mode 和 enforce_gtid_consistency,设置唯一 server-id,并在从库使用 CHANGE MASTER TO MASTER_AUTO_POSITION=1 建立连接。该方案适用于需要简化故障切换和避免事务重复执行的生产环境,风险边界是不支持非事务引擎和特定 DDL 语句。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

MySQL 5.7 配置 GTID 主从复制需在主从节点 my.cnf 中开启 gtid_mode 和 enforce_gtid_consistency,设置唯一 server-id,并在从库使用 CHANGE MASTER TO MASTER_AUTO_POSITION=1 建立连接。该方案适用于需要简化故障切换和避免事务重复执行的生产环境,风险边界是不支持非事务引擎和特定 DDL 语句。

先说结论:GTID 复制通过全局事务标识符自动定位同步点位,无需手动管理 binlog 文件名和 position 值。

  • 适合:需要高可用架构、频繁主从切换或避免事务重复执行的场景。
  • 先准备:确保主从数据一致,规划唯一的 server-id,备份全量数据。
  • 验收:执行 SHOW SLAVE STATUS 确认 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes。

命令速用版

主从节点 my.cnf 配置文件需包含以下核心参数,确保 binlog 格式为 ROW 且 GTID 模式开启。

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
gtid-mode=ON
enforce-gtid-consistency=ON
log-slave-updates=ON

从库连接主库使用 MASTER_AUTO_POSITION=1 替代传统的文件位置定位。

CHANGE MASTER TO
MASTER_HOST='主库 IP',
MASTER_USER='repl',
MASTER_PASSWORD='密码',
MASTER_AUTO_POSITION=1;

为什么会这样

GTID 由 server_uuid 和 transaction_id 组成,保证事务在集群中全局唯一。

传统复制依赖 binlog 文件名和位置偏移量,主库切换后需人工计算新位点。GTID 模式下,从库自动识别已执行事务集合,通过 MASTER_AUTO_POSITION=1 请求主库发送缺失的事务,简化了运维操作并降低了人为错误风险。

分步处理

配置过程分为参数修改、账号创建、数据同步和复制启动四个阶段。

1. 修改配置文件:主库和从库的/etc/my.cnf 均需设置 gtid_mode=ON 和 enforce_gtid_consistency=ON,server-id 必须全局唯一。

2. 创建复制账号:在主库执行 CREATE USER 和 GRANT REPLICATION SLAVE 权限,确保从库可连接。

MySQL 5.7基于GTID的主从复制怎么配置?

3. 数据一致性处理:新库可直接配置,旧库需通过 mysqldump 备份主库数据并导入从库,确保 GTID 执行集合一致。

4. 启动复制:在从库执行 CHANGE MASTER TO 命令后,运行 START SLAVE 启动同步线程。

怎么验证是否生效

通过 SHOW SLAVE STATUS 命令检查复制线程状态和 GTID 执行情况。

执行 SHOW SLAVE STATUS\G,确认 Slave_IO_Running 和 Slave_SQL_Running 状态均为 Yes。查看 Retrieved_Gtid_Set 和 Executed_Gtid_Set 字段,确认从库正在接收并执行主库的 GTID 事务。

常见坑

GTID 模式对 SQL 语句和存储引擎有特定限制,配置前需排查业务兼容性。

1. 不支持非事务引擎:MyISAM 等非事务存储引擎可能导致 GTID 不一致,建议统一使用 InnoDB。

2. 禁止特定语句:不支持 CREATE TABLE ... SELECT 语句,不支持创建或删除临时表操作。

MySQL 5.7基于GTID的主从复制怎么配置?

3. 参数顺序敏感:开启 GTID 需先设置 enforce_gtid_consistency=ON,再设置 gtid_mode=ON,顺序错误会导致启动失败。

常见问题

传统复制模式能直接切换到 GTID 吗?

可以切换,但需确保主从无匿名事务且数据一致。

先在主从服务器设置 GLOBAL.ENFORCE_GTID_CONSISTENCY=ON,观察状态确认无匿名事件后,再开启 GTID_MODE 并执行 CHANGE MASTER TO MASTER_AUTO_POSITION=1。

从库报错 GTID 不一致怎么处理?

需重置从库 GTID 状态或跳过特定事务。

若数据允许丢失,可 STOP SLAVE,RESET SLAVE ALL,重新导入备份并配置复制。若需跳过,可使用 sql_slave_skip_counter 但 GTID 模式下受限,建议重新构建从库。

参考来源

1. 51CTO 博客:mysql5.7 基于 GTID 实现主从复制_yang_hwei_lazihuman 的技术博客

2. CSDN 博客:配置 MySQL 5.7 基于 GTID 实现主从复制和使用 percona-toolkit 实现监控及数据校验

3. 技术博客:MySQL5.7 配置 GTID 主从---搭建 GTID 主从