MySQL8.0 执行脚本恢复报错@@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@

从线上 dump 出 sql 脚本,恢复到本地新建数据库报错。




在复制后执行sql导入数据库的时候,报错:@@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED。


--
-- GTID state at the beginning of the backup
-- (origin: @@global.gtid_executed)
--




SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '1b801a9f-df7d-11ee-98e3-fa163ef24bae:1-450116';




这是mysql5.6及以后的新特性GTID。




  GTID即全局事务ID(global transaction identifier),GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标识。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增,所以GTID能够保证每个MySQL实例事务的执行(不会重复执行同一个事务,并且会补全没有执行的事务)。




处理办法




重新 dump 数据库, 使用--set-gtid-purged=OFF的参数禁止🚫导出 GTID 信息,再 load 进目标数据库
在目标数据库中执行




mysql> reset slave all;




mysql> reset master;




清空所有 GTID 信息之后就可以正常导入。
Categories: 数据库运维