executed_gtid_set 与 purged_gtid_set
executed_gtid_set 和 purged_gtid_set 是 MySQL 复制中与 GTID(全局事务标识符)相关的两个重要概念:
定义:
- executed_gtid_set:已执行的 GTID 集合,包含所有在该服务器上执行过的事务的 GTID。
- purged_gtid_set:已清除的 GTID 集合,包含那些已经从 binlog 中物理删除的事务的 GTID。
包含关系:
- purged_gtid_set 是 executed_gtid_set 的子集。
- 所有在 purged_gtid_set 中的 GTID 必然也在 executed_gtid_set 中。
更新机制:
- executed_gtid_set 在每次事务执行后更新。
- purged_gtid_set 在 binlog 被清理(purge)时更新。
用途:
- executed_gtid_set 用于跟踪服务器已执行的所有事务。
- purged_gtid_set 用于标识哪些事务的 binlog 已不再可用。
复制影响:
- 从库无法复制 purged_gtid_set 中的事务,因为这些事务的 binlog 已被删除。
- 从库可以复制 executed_gtid_set 中但不在 purged_gtid_set 中的事务。
查看方法:
SHOW GLOBAL VARIABLES LIKE 'gtid_executed';
SHOW GLOBAL VARIABLES LIKE 'gtid_purged';
关系演变: 随着时间推移,purged_gtid_set 会逐渐增大,逐渐接近 executed_gtid_set 的早期部分。
理解这两个概念的关系对于管理 MySQL 复制拓扑和诊断复制问题非常重要。特别是在设置新的复制关系或处理复制延迟时,需要考虑这两个 GTID 集合的状态。