SET GLOBAL gtid_purged = 'xxx';
从参数介绍可以看出, 不管是mysqldump还是mysqlpump在使用--set-gtid-purged=OFF参数时都会将设置gtid的语句SET @@GLOBAL.GTID_PURGED和SET @@SESSION.SQL_LOG_BIN取消掉 ,所以加上--set-gtid-purged=OFF参数可以解决两个问题:
解决的问题一:如果导入的主库实例已经存在了gtid全局事务标识符,那么导出开启gtid的实例时就必须加上--set-gtid-purged=OFF,因为不加的话直接导出的SQL文件中会有设置SET @@GLOBAL.GTID_PURGED这行,就会导致报错:GTID_PURGED can only be set when GTID_EXECUTED is empty。
解决的问题二:导入的主库实例下面还挂有从库,那么导出开启gtid的实例时就必须加上--set-gtid-purged=OFF,因为不加的话直接导出的SQL文件中会有设置SET @@SESSION.SQL_LOG_BIN=0这行,就会导致导入的数据不写二进制日志,没有二进制日志从库也就没有数据了。
-
GTID的执行和记录:
- 当
gtid_mode
被设置为ON
时,MySQL会为每个事务生成一个GTID,并在事务日志中记录这个GTID。gtid_purged
变量用于记录那些已经执行过但不再需要保留日志的GTID。
- 当
-
清除二进制日志:
- 二进制日志的清除通常是由
PURGE BINARY LOGS
命令或者通过配置参数(如expire_logs_days
)自动管理的。gtid_purged
变量允许MySQL在没有物理日志文件的情况下,仍然知道哪些GTID已经被执行过。
- 二进制日志的清除通常是由
-
复制和恢复:
- 在复制和恢复操作中,
gtid_purged
变量确保了即使某些事务的日志已经被清除,MySQL也能正确地识别和同步这些事务,特别是在主从复制和故障转移场景中。
- 在复制和恢复操作中,
时来天地皆同力,运去英雄不自由