面试题答案
一键面试GTID基本原理
- 概念:GTID是一个全局唯一的事务标识符,在MariaDB中,每个事务在其生命周期内会被分配一个GTID,无论该事务在主库执行并传播到从库,还是直接在从库执行,GTID都能唯一标识它。
GTID组成结构
- 格式:GTID由两部分组成,格式为
server_uuid:transaction_id
。server_uuid
:是数据库实例在启动时生成的唯一标识符,在整个生命周期内保持不变,用于标识产生该事务的服务器。transaction_id
:是一个单调递增的数字,代表在该服务器上执行的事务的序列号,每执行一个新事务,该数字就会加1 。
在主从复制过程中的作用
- 主库操作:当主库上执行一个事务时,会为该事务生成一个GTID。在将事务写入二进制日志(binlog)时,GTID也会一同记录。例如,事务
T1
在主库执行,主库生成GTID1 = server_uuid1:1
,并将GTID1
和T1
的操作记录到binlog。 - 从库获取:从库通过I/O线程连接主库,读取主库的binlog。从库获取到包含GTID的事务记录后,会将其写入自己的中继日志(relay log)。
- 从库回放:SQL线程从relay log中读取事务记录,根据GTID判断该事务是否已经执行过。如果从库中没有记录该GTID,则执行该事务,并记录该GTID到自己的
gtid_executed
集合中。例如,从库读取到GTID1
,发现gtid_executed
中没有GTID1
,则执行事务T1
并将GTID1
加入gtid_executed
。这种方式确保了从库不会重复执行已经执行过的事务,提高了主从复制的可靠性和一致性。