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这行,就会导致导入的数据不写二进制日志,没有二进制日志从库也就没有数据了。

 

  1. GTID的执行和记录:

    • gtid_mode被设置为ON时,MySQL会为每个事务生成一个GTID,并在事务日志中记录这个GTID。gtid_purged变量用于记录那些已经执行过但不再需要保留日志的GTID。
  2. 清除二进制日志:

    • 二进制日志的清除通常是由PURGE BINARY LOGS命令或者通过配置参数(如expire_logs_days)自动管理的。gtid_purged变量允许MySQL在没有物理日志文件的情况下,仍然知道哪些GTID已经被执行过。
  3. 复制和恢复:

    • 在复制和恢复操作中,gtid_purged变量确保了即使某些事务的日志已经被清除,MySQL也能正确地识别和同步这些事务,特别是在主从复制和故障转移场景中。

 

posted @ 2024-12-24 09:37  滴滴滴  阅读(21)  评论(0编辑  收藏  举报