MySQL主从同步问题之GLOBAL.GTID_EXECUTEDis...

运维有笔谈 2024-07-18 16:43:01

私信运维笔谈,回复 “linux故障处理” 可以获取《阿里云运维实战手册-linux故障处理和修复.pdf》

MySQL设置多源复制的时候,新增1个数据源的时候,需要重新设置下GLOBAL.GTID_PURGED,但是MySQL会抛出错误“@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty”。这个错误一般会出现在尝试设置全局变量@@GLOBAL.GTID_PURGED时,此时@@GLOBAL.GTID_EXECUTED中已经有了一些已执行的GTID(全局事务标识符)。

GTID是MySQL复制中用于唯一标识事务的标识符,它由两部分组成:UUID(服务器的唯一标识符)和事务的序列号。在MySQL复制环境中,特别是使用GTID-based复制时,这些标识符用于确保事务的完整性和一致性。

错误原因

当我们在尝试设置一个非空的GTID_PURGED值时,MySQL会检查GTID_EXECUTED列表。如果GTID_EXECUTED不为空,MySQL将不允许更改GTID_PURGED,因为这可能导致数据不一致或复制冲突。

解决方法参考设置GTID_PURGED。这通常是在恢复数据库或从备份中初始化复制环境时需要的。清空GTID_EXECUTED。需要设置GTID_PURGED,并且可以接受清空所有已执行的事务(即重置复制状态),你可以考虑清空GTID_EXECUTED。这可能是一个比较极端的措施了,因为它会删除所有复制状态,可能导致数据丢失(需要谨慎!)。在MySQL 5.7,我们可以使用 RESET MASTER 或 RESET SLAVE ALL 命令来清空GTID_EXECUTED,取决于MySQL角色是主服务器还是从服务器。MySQL 8.0,我们可以使用RESET MASTER TO 'UUID:NUMBER'; 来更精确地控制重置点,需要谨慎操作。重新配置复制:如果清空了GTID_EXECUTED,需要重新配置复制。注意点在执行任何可能影响复制和数据一致性的操作之前,切记做好备份,备份,备份。GTID复制是一个复杂的功能,需要仔细规划和管理,我们最好先在测试环境中进行试验,然后再在生产环境中操作,不要直接上生产环境。

如果您在日常运维工作中遇到了任何问题或挑战,无论是关于系统配置、性能优化、故障排除还是其他方面,都欢迎您随时留言或私信我。我会尽我所能为您提供解决方法或建议。相互学习,积累更多的经验和知识!

文章阅读累了,缓解下

0 阅读:0

运维有笔谈

简介:感谢大家的关注