Debezium系列之:深入理解GTID,并记录一次数据库重启造成数据丢失的原因和解决方案
一、背景
- hive数据库的表与源头业务数据库的数据不一致,经过检查发现源头数据库发生了重启,造成了binlog文件名称的变化,从而下游在解析debezium数据的时候出现了遗漏
- 针对这个情况,考虑应用gtid确保数据的一致性和可靠性
二、深入理解什么是GTID
- GTID (Global Transaction Identifier) 是 MySQL 中用于唯一标识事务的全局标识符。每个事务都被分配一个唯一的 GTID,用于在主从复制中进行事务的追踪和同步。
- 在给定的 GTID “eb1e5031-60c4-11ed-9363-b8599f2795e8:4682321465” 中,可以将它分为两部分:UUID 和数字部分。UUID 部分 “eb1e5031-60c4-11ed-9363-b8599f2795e8” 是一个唯一的标识符,用于标识产生 GTID 的服务器。每个服务器都会有自己的 UUID。数字部分 “4682321465” 是该 GTID 在特定服务器上的序列号,表示该事务是在该服务器上的第几个事务。
- GTID 可以用于确保主从数据库之间的数据一致性和可靠性。通过将 GTID 应用到主数据库的事务日志中,从数据库可以根据 GTID 来追踪和复制主数据库上的事务。当从数据库发生故障或与主数据库断开连接时,可以使用 GTID 来确定需要从主数据库的哪个位置恢复数据同步。
- 总结来说,MySQL GTID 是用于唯一标识事务的全局标识符。它由 UUID 和数字部分组成,其中 UUID 标识产生 GTID 的服务器,数字部分表示事务的序列号。GTID 在主从复制中起到了关键的作用,确保数据的一致性和可靠性。