官方参考文档

全局事务标识符

全局事务标识符(GTID)是创建的唯一标识符,并且与在源服务器(主服务器)上提交的每个事务相关联。该标识符不仅对于它起源的服务器是唯一的,而且在给定复制拓扑中的所有服务器上也是唯一的。
GTID表示为一对坐标,并用冒号(:)分隔,如下所示:

1
GTID = source_id:transaction_id

source_id:主服务器上的uuid

transaction_id:提交的事务id

例如,最初要在服务器上使用UUID提交的第二十三笔交易 3E11FA47-71CA-11E1-9E33-C80AA9429562具有以下GTID:3E11FA47-71CA-11E1-9E33-C80AA9429562:23

GTID集:2174B383-5441-11E8-B90A-C80AA9429562:1-3, 24DA167-0C0C-11E8-8442-00059A3C7B00:1-19

事务的GTID通过mysqlbinlog命令可以查询出来

设置复制

1. 如果复制已经在运行,则通过将它们设置为只读来同步两个服务器。

1
SET @@GLOBAL.read_only = ON;

通过上面的命令,使主从都变成只读状态,然后开始同步。

2. 停止两个服务器。

3. 重新启动两个启用了GTID并配置了正确选项的服务器。

  • 主服务器配置
1
2
3
4
5
6
7
8
###########必须############
server-id=142
log-bin=mysql-bin

gtid_mode=ON
enforce-gtid-consistency=ON

###########可选############
  • 从服务器配置
1
2
3
4
5
6
###########必须############
server-id=168

gtid_mode=ON
enforce-gtid-consistency=ON
###########可选############

4. 指示从属服务器将主服务器用作复制数据源并使用自动定位

在从服务器端执行

1
2
3
4
5
6
CHANGE MASTER TO
MASTER_HOST = host,
MASTER_PORT = port,
MASTER_USER = user,
MASTER_PASSWORD = password,
MASTER_AUTO_POSITION = 1;

5. 进行新的备份

包含没有GTID的事务的二进制日志不能在启用了GTID的服务器上使用,因此在此之前进行的备份不能与新配置一起使用。

在主服务器端执行

1
FLUSH LOGS

6. 启动从属服务器,然后在两台服务器上禁用只读模式,以便它们可以接受更新。

1
START SLAVE;
1
SET @@GLOBAL.read_only = OFF;