一、GTID 是什么?为什么要用它?
GTID(Global Transaction ID):
每一个事务在主库上都会被分配一个全局唯一的事务 ID,从库只需要“跟着 GTID 走”,而不再依赖 binlog 文件名 + position。
优点
- 不需要手动记
master_log_file和position - 主从切换、故障恢复更简单
- 避免重复执行或漏执行事务
- 运维友好
二、如何使用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 主从同步成功 。