#### 17.1.6.5 全局事务 ID 系统变量

本节中描述的 MySQL 服务器系统变量用于监视和控制全局事务标识符 (GTID)。有关其他信息，请参阅[第 17.1.3 节，“使用全局事务标识符进行复制”](replication-gtids.html).

-   [](<>) [`binlog_gtid_simple_recovery`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery)

    [](<>)[](<>)

    | 命令行格式 | `--binlog-gtid-simple-recovery[={OFF|ON}]` |
    | ----- | ------------------------------------------ |
    | 系统变量 | `[binlog_gtid_simple_recovery]（复制选项-gtids.html#sysvar_binlog_gtid_simple_recovery）` |
    | 范围 | 全球的 |
    | 动态的 | 不 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 布尔值 |
    | 默认值 | `在` |

    此变量控制在 MySQL 启动或重新启动时搜索 GTID 期间如何迭代二进制日志文件。

    什么时候[`binlog_gtid_simple_recovery=TRUE`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery)，这是 MySQL 8.0 中的默认值，[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)和[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)在启动时根据以下值计算`Previous_gtids_log_event`在最新和最旧的二进制日志文件中。有关计算的说明，请参见[这`gtid_purged`系统变量](replication-gtids-lifecycle.html#replication-gtids-gtid-purged).此设置在服务器重新启动期间仅访问两个二进制日志文件。如果服务器上的所有二进制日志都是使用 MySQL 5.7.8 或更高版本生成的，[`binlog_gtid_simple_recovery=TRUE`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery)始终可以安全使用。

    如果服务器上存在 MySQL 5.7.7 或更早版本的任何二进制日志（例如，在将旧服务器升级到 MySQL 8.0 之后），使用[`binlog_gtid_simple_recovery=TRUE`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery),[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)和[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)以下两种情况可能会初始化错误：

    -   最新的二进制日志是由 MySQL 5.7.5 或更早版本生成的，并且[`gtid_mode`](replication-options-gtids.html#sysvar_gtid_mode)曾是`在`对于一些二进制日志，但是`离开`获取最新的二进制日志。

    -   一种`SET @@GLOBAL.gtid_purged`语句是在 MySQL 5.7.7 或更早版本上发出的，并且在执行该语句时处于活动状态的二进制日志`SET @@GLOBAL.gtid_purged`声明尚未被清除。

        如果在任何一种情况下计算出错误的 GTID 集，即使服务器稍后重新启动，它仍然不正确[`binlog_gtid_simple_recovery=假`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery).如果这些情况中的任何一种适用或可能适用于服务器，请设置[`binlog_gtid_simple_recovery=假`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery)在启动或重新启动服务器之前。

        什么时候[`binlog_gtid_simple_recovery=假`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery)设置，计算方法[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)和[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)如中所述[这`gtid_purged`系统变量](replication-gtids-lifecycle.html#replication-gtids-gtid-purged)改为迭代二进制日志文件如下：

    -   而不是使用`Previous_gtids_log_event`和来自最新二进制日志文件的 GTID 日志事件，计算[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)从最新的二进制日志文件中迭代，并使用`Previous_gtids_log_event`以及它找到的第一个二进制日志文件中的任何 GTID 日志事件`Previous_gtids_log_event`价值。如果服务器最近的二进制日志文件没有 GTID 日志事件，例如如果[`gtid_mode=ON`](replication-options-gtids.html#sysvar_gtid_mode)曾使用过，但服务器后来改为[`gtid_mode=OFF`](replication-options-gtids.html#sysvar_gtid_mode)，这个过程可能需要很长时间。

    -   而不是使用`Previous_gtids_log_event`从最旧的二进制日志文件中，计算[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)从最旧的二进制日志文件中迭代，并使用`Previous_gtids_log_event`从第一个二进制日志文件中找到一个非空的`Previous_gtids_log_event`值，或至少一个 GTID 日志事件（表明 GTID 的使用从该点开始）。如果服务器的旧二进制日志文件没有 GTID 日志事件，例如，如果[`gtid_mode=ON`](replication-options-gtids.html#sysvar_gtid_mode)最近才在服务器上设置，这个过程可能需要很长时间。

-   [](<>) [`强制gtid_consistency`](replication-options-gtids.html#sysvar_enforce_gtid_consistency)

    [](<>)[](<>)

    | 命令行格式 | `--enforce-gtid-consistency[=值]` |
    | ----- | -------------------------------- |
    | 系统变量 | `[enforce_gtid_consistency]（复制选项-gtids.html#sysvar_enforce_gtid_consistency）` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 枚举 |
    | 默认值 | `离开` |
    | 有效值 | `离开`<br/><br/>`在`<br/><br/>`警告` |

    根据此变量的值，服务器通过只允许执行可以使用 GTID 安全记录的语句来强制执行 GTID 一致性。你*必须*将此变量设置为`在`在启用基于 GTID 的复制之前。

    那些价值观[`强制gtid_consistency`](replication-options-gtids.html#sysvar_enforce_gtid_consistency)可以配置为：

    -   `离开`：允许所有事务违反 GTID 一致性。

    -   `在`: 不允许任何事务违反 GTID 一致性。

    -   `警告`：允许所有事务违反 GTID 一致性，但在这种情况下会生成警告。

    [`--enforce-gtid-一致性`](replication-options-gtids.html#sysvar_enforce_gtid_consistency)仅当对语句进行二进制日志记录时才会生效。如果在服务器上禁用了二进制日志记录，或者如果语句由于被过滤器删除而未写入二进制日志，则不会检查或强制未记录语句的 GTID 一致性。

    只有可以使用 GTID 安全语句记录的语句才能在以下情况下记录[`强制gtid_consistency`](replication-options-gtids.html#sysvar_enforce_gtid_consistency)被设定为`在`，因此此处列出的操作不能与此选项一起使用：

    -   [`创建临时表`](create-table.html)要么[`删除临时表`](drop-table.html)交易中的陈述。

    -   更新事务和非事务表的事务或语句。有一个例外，即在与事务性 DML 相同的事务或相同语句中允许非事务性 DML，如果所有*非交易性*表是临时的。

    -   [`创建表...选择`](create-table-select.html)语句，在 MySQL 8.0.21 之前。从 MySQL 8.0.21 开始，[`创建表...选择`](create-table-select.html)支持原子 DDL 的存储引擎允许使用语句。

        有关详细信息，请参阅[第 17.1.3.7 节，“使用 GTID 进行复制的限制”](replication-gtids-restrictions.html).

        在 MySQL 5.7 之前和该版本系列的早期版本中，布尔值[`强制gtid_consistency`](replication-options-gtids.html#sysvar_enforce_gtid_consistency)默认为`离开`.为了保持与这些早期版本的兼容性，枚举默认为`离开`, 并设置[`--enforce-gtid-一致性`](replication-options-gtids.html#sysvar_enforce_gtid_consistency)没有值被解释为将值设置为`在`.该变量还具有多个值的文本别名：`0=关=假`,`1=开=真`,`2=警告`.这与其他枚举类型不同，但保持与以前版本中使用的布尔类型的兼容性。这些更改会影响变量返回的内容。使用`选择@@ENFORCE_GTID_CONSISTENCY`,`显示像“ENFORCE_GTID_CONSISTENCY”这样的变量`， 和`SELECT * FROM INFORMATION_SCHEMA.VARIABLES WHERE 'VARIABLE_NAME' = 'ENFORCE_GTID_CONSISTENCY'`，都返回文本形式，而不是数字形式。这是一个不兼容的变化，因为`@@ENFORCE_GTID_CONSISTENCY`返回布尔值的数字形式，但返回文本形式`显示`和信息模式。

-   [](<>) [`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)

    [](<>)[](<>)

    | 系统变量 | `[gtid_executed]（复制选项-gtids.html#sysvar_gtid_executed）` |
    | ---- | ------------------------------------------------------- |
    | 范围 | 全球的 |
    | 动态的 | 不 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 细绳 |
    | 单元 | `一组 GTID` |

    当与全局范围一起使用时，此变量包含在服务器上执行的所有事务的集合的表示以及由 a 设置的 GTID[`放`](set-variable.html) [`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)陈述。这与`Executed_Gtid_Set`输出中的列[`显示主状态`](show-master-status.html)和[`显示副本状态`](show-replica-status.html).这个变量的值是一个 GTID 集，见[GTID 集](replication-gtids-concepts.html#replication-gtids-concepts-gtid-sets)了解更多信息。

    服务器启动时，`@@GLOBAL.gtid_executed`被初始化。看[`binlog_gtid_simple_recovery`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery)有关如何迭代二进制日志以填充的更多信息[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed).然后在执行事务时将 GTID 添加到集合中，或者如果有的话[`放`](set-variable.html) [`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)语句被执行。

    在任何给定时间可以在二进制日志中找到的事务集等于[`GTID_SUBTRACT（@@GLOBAL.gtid_executed，@@GLOBAL.gtid_purged）`](gtid-functions.html#function_gtid-subtract);也就是说，对于二进制日志中尚未清除的所有事务。

    发行[`复位主机`](reset-master.html)导致此变量的全局值（但不是会话值）重置为空字符串。GTID 不会从该集合中移除，除非该集合因以下原因而被清除`复位主机`.

    在某些较旧的版本中，此变量也可以与会话范围一起使用，其中它包含在当前会话中写入缓存的事务集的表示。会话范围现在已弃用。

-   [](<>) [`gtid_executed_compression_period`](replication-options-gtids.html#sysvar_gtid_executed_compression_period)

    [](<>)[](<>)

    | 命令行格式 | `--gtid-执行-压缩-周期=#` |
    | ----- | ------------------- |
    | 系统变量 | `[gtid_executed_compression_period]（复制选项-gtids.html#sysvar_gtid_executed_compression_period）` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 整数 |
    | 默认值（≥ 8.0.23） | `0` |
    | 默认值 (≤ 8.0.22) | `1000` |
    | 最小值 | `0` |
    | 最大值 | `4294967295` |

    压缩`mysql.gtid_executed`每次处理这么多事务时，表。在服务器上启用二进制日志记录时，不使用此压缩方法，而是使用`mysql.gtid_executed`表在每个二进制日志轮换时被压缩。当服务器上禁用二进制日志记录时，压缩线程会休眠，直到执行了指定数量的事务，然后唤醒以执行压缩`mysql.gtid_executed`桌子。将此系统变量的值设置为 0 意味着线程永远不会唤醒，因此不使用这种显式压缩方法。相反，压缩会根据需要隐式发生。

    从 MySQL 8.0.17 开始，`InnoDB`事务被写入`mysql.gtid_executed`表由一个单独的过程来非`InnoDB`交易。如果服务器混合了`InnoDB`交易和非`InnoDB`在事务中，此系统变量控制的压缩会干扰此过程的工作，并可能显着减慢它。因此，从该版本开始，建议您设置[`gtid_executed_compression_period`](replication-options-gtids.html#sysvar_gtid_executed_compression_period)为 0。

    从 MySQL 8.0.23 开始，`InnoDB`和非`InnoDB`事务被写入`mysql.gtid_executed`表通过相同的过程，并且[`gtid_executed_compression_period`](replication-options-gtids.html#sysvar_gtid_executed_compression_period)默认值为 0。

    看[mysql.gtid\_执行表压缩](replication-gtids-concepts.html#replication-gtids-gtid-executed-table-compression)了解更多信息。

-   [](<>) [`gtid_mode`](replication-options-gtids.html#sysvar_gtid_mode)

    [](<>)[](<>)

    | 命令行格式 | `--gtid-模式=模式` |
    | ----- | -------------- |
    | 系统变量 | `[gtid_mode]（复制选项-gtids.html#sysvar_gtid_mode）` |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 枚举 |
    | 默认值 | `离开` |
    | 有效值 | `离开`<br/><br/>`OFF_PERMISSIVE`<br/><br/>`ON_PERMISSIVE`<br/><br/>`在` |

    控制是否启用基于 GTID 的日志记录以及日志可以包含的事务类型。您必须具有足够的权限才能设置全局系统变量。看[第 5.1.9.1 节，“系统变量权限”](system-variable-privileges.html).[`强制gtid_consistency`](replication-options-gtids.html#sysvar_enforce_gtid_consistency)必须设置为`在`在你可以设置之前[`gtid_mode=ON`](replication-options-gtids.html#sysvar_gtid_mode).在修改此变量之前，请参阅[第 17.1.4 节，“更改在线服务器上的 GTID 模式”](replication-mode-change-online.html).

    记录的事务可以是匿名的或使用 GTID。匿名事务依赖二进制日志文件和位置来识别特定事务。GTID 事务具有用于引用事务的唯一标识符。不同的模式是：

    -   `离开`: 新的和复制的事务都必须是匿名的。

    -   `OFF_PERMISSIVE`: 新交易是匿名的。复制的交易可以是匿名交易或 GTID 交易。

    -   `ON_PERMISSIVE`: 新交易是 GTID 交易。复制的交易可以是匿名交易或 GTID 交易。

    -   `在`：新事务和复制事务都必须是 GTID 事务。

        从一个值到另一个值的更改一次只能是一个步骤。例如，如果[`gtid_mode`](replication-options-gtids.html#sysvar_gtid_mode)当前设置为`OFF_PERMISSIVE`, 可以改成`离开`要么`ON_PERMISSIVE`但不是`在`.

        的价值观[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)和[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)无论价值如何，都是持久的[`gtid_mode`](replication-options-gtids.html#sysvar_gtid_mode).因此，即使在改变了[`gtid_mode`](replication-options-gtids.html#sysvar_gtid_mode)，这些变量包含正确的值。

-   [](<>) [`gtid_next`](replication-options-gtids.html#sysvar_gtid_next)

    [](<>)[](<>)

    | 系统变量 | `[gtid_next]（复制选项-gtids.html#sysvar_gtid_next）` |
    | ---- | ----------------------------------------------- |
    | 范围 | 会议 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 枚举 |
    | 默认值 | `自动的` |
    | 有效值 | `自动的`<br/><br/>`匿名的`<br/><br/>`UUID：号码` |

    该变量用于指定是否以及如何获取下一个 GTID。

    设置此系统变量的会话值是一项受限操作。会话用户必须具有[`REPLICATION_APPLIER`](privileges-provided.html#priv_replication-applier)特权（见[第 17.3.3 节，“复制权限检查”](replication-privilege-checks.html))，或足以设置受限会话变量的权限（请参阅[第 5.1.9.1 节，“系统变量权限”](system-variable-privileges.html)）。

    `gtid_next`可以采用以下任何值：

    -   `自动的`：使用下一个自动生成的全局事务 ID。

    -   `匿名的`：事务没有全局标识符，仅由文件和位置标识。

    -   全局事务 ID*`UUID`*：*`数字`*格式。

        上述选项中的哪一个是有效的取决于设置[`gtid_mode`](replication-options-gtids.html#sysvar_gtid_mode)， 看[第 17.1.4.1 节，“复制模式概念”](replication-mode-change-online-concepts.html)了解更多信息。设置此变量无效，如果[`gtid_mode`](replication-options-gtids.html#sysvar_gtid_mode)是`离开`.

        将此变量设置为*`UUID`*：*`数字`*，并且事务已提交或回滚，显式`设置 GTID_NEXT`声明必须在任何其他声明之前再次发出。

    [`删除表`](drop-table.html)要么[`删除临时表`](drop-table.html)当用于非临时表与临时表的组合，或使用事务存储引擎的临时表与使用非事务存储引擎的临时表的组合时，失败并出现显式错误。

-   [](<>) [`gtid_owned`](replication-options-gtids.html#sysvar_gtid_owned)

    [](<>)[](<>)

    | 系统变量 | `[gtid_owned](复制选项-gtids.html#sysvar_gtid_owned)` |
    | ---- | ------------------------------------------------- |
    | 范围 | 全球, 会话 |
    | 动态的 | 不 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 细绳 |
    | 单元 | `一组 GTID` |

    此只读变量主要供内部使用。它的内容取决于它的范围。

    -   与全局范围一起使用时，[`gtid_owned`](replication-options-gtids.html#sysvar_gtid_owned)包含当前在服务器上使用的所有 GTID 的列表，以及拥有它们的线程的 ID。此变量主要用于多线程副本检查事务是否已在另一个线程上应用。应用程序线程在处理事务时始终拥有事务的 GTID，因此`@@global.gtid_owned`显示处理期间的 GTID 和所有者。当事务已提交（或回滚）时，应用程序线程释放 GTID 的所有权。

    -   当与会话范围一起使用时，[`gtid_owned`](replication-options-gtids.html#sysvar_gtid_owned)拥有一个当前由该会话使用和拥有的 GTID。当客户端通过设置为事务显式分配 GTID 时，此变量主要用于测试和调试 GTID 的使用[`gtid_next`](replication-options-gtids.html#sysvar_gtid_next).在这种情况下，`@@session.gtid_owned`在客户端处理事务时一直显示 GTID，直到事务被提交（或回滚）。当客户端完成处理事务时，变量被清除。如果[`gtid_next=自动`](replication-options-gtids.html#sysvar_gtid_next)用于会话，[`gtid_owned`](replication-options-gtids.html#sysvar_gtid_owned)仅在事务的提交语句执行期间短暂填充，因此无法从相关会话中观察到它，尽管它在以下情况下被列出`@@global.gtid_owned`在正确的位置读取。如果您需要跟踪会话中客户端处理的 GTID，您可以启用由[`session_track_gtids`](server-system-variables.html#sysvar_session_track_gtids)系统变量。

-   [](<>) [`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)

    [](<>)[](<>)

    | 系统变量 | `[gtid_purged]（复制选项-gtids.html#sysvar_gtid_purged）` |
    | ---- | --------------------------------------------------- |
    | 范围 | 全球的 |
    | 动态的 | 是的 |
    | [`SET_VAR`](optimizer-hints.html#optimizer-hints-set-var)提示适用 | 不 |
    | 类型 | 细绳 |
    | 单元 | `一组 GTID` |

    全球价值[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)系统变量 (`@@GLOBAL.gtid_purged`) 是一个 GTID 集，由服务器上已提交但不存在于服务器上的任何二进制日志文件中的所有事务的 GTID 组成。[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)是的一个子集[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed).以下类别的 GTID 在[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)：

    -   在副本上禁用二进制日志记录的情况下提交的复制事务的 GTID。

    -   写入二进制日志文件的事务的 GTID，现在已被清除。

    -   由语句显式添加到集合中的 GTID`SET @@GLOBAL.gtid_purged`.

        服务器启动时，全局值[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)初始化为一组 GTID。有关如何计算此 GTID 集的信息，请参阅[这`gtid_purged`系统变量](replication-gtids-lifecycle.html#replication-gtids-gtid-purged).如果服务器上存在 MySQL 5.7.7 或更早版本的二进制日志，您可能需要设置[`binlog_gtid_simple_recovery=假`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery)在服务器的配置文件中生成正确的计算。请参阅说明[`binlog_gtid_simple_recovery`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery)有关需要此设置的情况的详细信息。

        发行[`复位主机`](reset-master.html)导致的价值[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)重置为空字符串。

        您可以设置的值[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)为了在服务器上记录某个 GTID 集中的事务已被应用，尽管它们不存在于服务器上的任何二进制日志中。此操作的一个示例用例是当您在服务器上恢复一个或多个数据库的备份时，但您没有包含服务器上事务的相关二进制日志。

    重要的

    GTID 仅在服务器实例上可用，最多可用于有符号 64 位整数的非负值数量（2 的 63 次方，负 1）。如果你设置的值[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)对于接近此限制的数字，后续提交可能会导致服务器用完 GTID 并采取由[`binlog_error_action`](replication-options-binary-log.html#sysvar_binlog_error_action).从 MySQL 8.0.23 开始，当服务器实例接近限制时会发出警告消息。

    从 MySQL 8.0 开始，有两种方法可以设置[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged).您可以替换的值[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)使用您指定的 GTID 集，或者您可以将您指定的 GTID 集附加到已被持有的 GTID 集[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged).如果服务器没有现有的 GTID，例如您正在使用现有数据库的备份配置的空服务器，则两种方法具有相同的结果。如果您要恢复的备份与服务器上已有的事务重叠，例如，用来自使用的源的部分转储替换损坏的表[**mysql转储**](mysqldump.html)（包括服务器上所有事务的 GTID，即使转储是部分的），使用第一种方法替换[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged).如果您要恢复的备份与服务器上已经存在的事务不相交，例如使用来自两个不同服务器的转储来供应多源副本，请使用第二种方法添加[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged).

    -   替换的值[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)使用您指定的 GTID 集，使用以下语句：

        ```
        SET @@GLOBAL.gtid_purged = 'gtid_set'
        ```

        `gtid_set`必须是当前值的超集[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged), 并且不能与`gtid_subtract(gtid_executed,gtid_purged)`.换句话说，新的 GTID 集**必须**包括任何已经存在的 GTID[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)， 和**禁止**包括任何 GTID[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)尚未清除的。`gtid_set`也不能包含任何 GTID`@@global.gtid_owned`，即服务器上当前正在处理的事务的 GTID。

        结果是全球价值[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)设置为等于`gtid_set`，以及[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)成为联合体`gtid_set`和之前的值[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed).

    -   将您指定的 GTID 设置附加到[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)，在 GTID 集之前使用以下带有加号 (+) 的语句：

        ```
        SET @@GLOBAL.gtid_purged = '+gtid_set'
        ```

        `gtid_set` **禁止**与当前值相交[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed).换句话说，新的 GTID 集不得包含任何 GTID[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)，包括已经在[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged).`gtid_set`也不能包含任何 GTID`@@global.gtid_owned`，即服务器上当前正在处理的事务的 GTID。

        结果是`gtid_set`被添加到两者[`gtid_executed`](replication-options-gtids.html#sysvar_gtid_executed)和[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged).

笔记

如果服务器上存在 MySQL 5.7.7 或更早版本的任何二进制日志（例如，在将旧服务器升级到 MySQL 8.0 之后），在发出`SET @@GLOBAL.gtid_purged`声明，您可能需要设置[`binlog_gtid_simple_recovery=假`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery)在重新启动服务器之前在服务器的配置文件中，否则[`gtid_purged`](replication-options-gtids.html#sysvar_gtid_purged)可能计算不正确。请参阅说明[`binlog_gtid_simple_recovery`](replication-options-gtids.html#sysvar_binlog_gtid_simple_recovery)有关需要此设置的情况的详细信息。
