一、GTID 是什么?为什么要用它?

GTID(Global Transaction ID)
每一个事务在主库上都会被分配一个全局唯一的事务 ID,从库只需要“跟着 GTID 走”,而不再依赖 binlog 文件名 + position

优点

  • 不需要手动记 master_log_fileposition
  • 主从切换、故障恢复更简单
  • 避免重复执行或漏执行事务
  • 运维友好

二、如何使用GTID为MySQL数据库配置主从?

1、主数据库配置:

编辑主数据库的my.cnf:
[mysqld]
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_format=ROW
log_slave_updates=ON

注意,server-id的数值必须唯一。

重启MySQL:
systemctl restart mysqld
创建同步账号
CREATE USER 'copy'@'%' IDENTIFIED BY 'StrongPassword!';
GRANT REPLICATION SLAVE ON *.* TO 'copy'@'%';
FLUSH PRIVILEGES;

2、从库配置

编辑从数据库的my.cnf:
[mysqld]
server-id=2
log-bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_format=ROW
log_slave_updates=ON

注意,server-id的数值必须唯一。

重启MySQL:
systemctl restart mysqld

三、初始化主从数据

GTID 模式下,主从数据必须一致。这里我们直接导出主数据库:

mysqldump -uroot -p \
--all-databases \
--single-transaction \
--master-data=2 \
--set-gtid-purged=ON > full.sql

从库导入

mysql -uroot -p < full.sql

复制主数据库的密钥到从库:

scp -r root@主数据库IP:/var/lib/mysql/*.pem /var/lib/mysql/

四、配置 GTID 主从关系

在从库执行:

RESET REPLICA ALL;
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='主数据库IP',
  SOURCE_PORT=3306,
  SOURCE_USER='copy',
  SOURCE_PASSWORD='StrongPassword',
  SOURCE_AUTO_POSITION=1,
  SOURCE_SSL=1,
  SOURCE_SSL_CA='/var/lib/mysql/ca.pem',
  SOURCE_SSL_CERT='/var/lib/mysql/client-cert.pem',
  SOURCE_SSL_KEY='/var/lib/mysql/client-key.pem';
START REPLICA;
SHOW REPLICA STATUS\G

重点看这两个字段:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

如果都是 Yes,说明 GTID 主从同步成功