GTID 主从
GTID 概念介绍
GTID 即全局事务ID(global transaction identifier), 其保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的 ID 。GTID 最初由 google 实现,官方 MySQL 在 5.6 才加入该功能。mysql 主从结构在一主一从情况下对于 GTID 来说就没有优势了,而对于 2 台主以上的结构优势异常明显,可以在数据不丢失的情况下切换新主。使用 GTID 需要注意: 在构建主从复制之前,在一台将成为主的实例上进行一些操作(如数据清理等),通过 GTID 复制,这些在主从成立之前的操作也会被复制到从服务器上,引起复制失败。也就是说通过 GTID 复制都是从最先开始的事务日志开始,即使这些操作在复制之前执行。比如在 server1 上执行一些 drop、delete 的清理操作,接着在 server2 上执行 change 的操作,会使得 server2 也进行 server1 的清理操作。
GTID 实际上是由 UUID + TID(即 transactionId)组成的。其中 UUID(即server_uuid) 产生于 auto.conf 文件(cat /data/mysql/data/auto.cnf),是一个 MySQL 实例的唯一标识。TID 代表了该实例上已经提交的事务数量,并且随着事务提交单调递增,所以 GTID 能够保证每个 MySQL 实例事务的执行(不会重复执行同一个事务,并且会补全没有执行的事务)。GTID 在一组复制中,全局唯一。下面是一个 GTID 的具体形式 :
mysql> show master status;
+-----------+----------+--------------+------------------+-------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------+----------+--------------+------------------+-------------------------------------------+
| on.000003 | 187 | | | 7286f791-125d-11e9-9a9c-0050568843f8:1-362|
+-----------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.00 sec)
GTID:7286f791-125d-11e9-9a9c-0050568843f8:1-362
UUID:7286f791-125d-11e9-9a9c-0050568843f8
transactionId:1-362
在整个复制架构中GTID 是不变化的,即使在多个连环主从中也不会变。
例如:ServerA --->ServerB ---->ServerC
GTID从在ServerA ,ServerB,ServerC 中都是一样的。
了解了