文档解释
Error number: MY-010917; Symbol: ER_GTID_EXECUTED_WAS_UPDATED; SQLSTATE: HY000
Message: @@GLOBAL.GTID_EXECUTED was changed from ‘%s’ to ‘%s’.
错误说明
MY-010917: ER_GTID_EXECUTED_WAS_UPDATED错误是MySQL数据库中比较常见的错误。指的是MySQL发起的某种特定事务管理操作期间,与该事务管理有关的全局事务标识(即GTID)所标识的事务或其他当前正在执行的事务在事务提交之后,GTID指示的事务已经在某一时刻被修改。
一般情况下,MY-010917错误由MySQL复制过程引起,特别是在复制服务器与主服务器之间出现复制落后问题时,复制服务器试图进行对应位置逻辑时就会发生该错误。
常见案例
当我们在使用MySQL复制时,往往会出现一些错误,而这也正是MY-010917错误的普遍发生的案例。MySQL的复制系统是通过全局事务标识(GTID)来驱动的,全局事务标识有时会被主服务器改变,从而造成它不再指向原先的事务。而当复制服务器试图执行之前的事务时,此时就会报出MY-010917错误,因此,当出现复制落后问题时,就可能会出现该错误。
解决方法
针对该错误,MySQL官方提供了三种主要的解决方法:
1、使用 GTID_SUBSETTED 这个参数来替换需要执行的事务。这是MySQL 5.6中引入的一个新特性。它可以替换执行的事务,并跳过已经适用于GTID_EXECUTED的事务。
2、在复制服务器上停止 Slave_SQL_Running线程,这可以跳过已完成的事务,并除去 MY-010917错误发生的原因。
3、清除复制错误,使复制错误可以再次启动,并将从服务器重置到发生此错误之前的状态。
以上三种方法可以根据具体情况选择使用,对于MY-010917错误就能有效解决。一般来说,使用GTID_SUBSETTED是更安全更可行的解决方案。