### 17.5.2 MySQL版本之间的复制兼容性

MySQL支持从一个版本系列复制到下一个更高版本系列。例如，您可以从运行MySQL 5.6的源复制到运行MySQL 5.7的副本，从运行MySQL 5.7的源复制到运行MySQL 8.0的副本，以此类推。但是，如果源代码使用的语句或依赖的行为在副本上使用的MySQL版本中不再受支持，则在从较旧的源代码复制到较新的副本时，可能会遇到困难。例如，MySQL 8.0不再支持长度超过64个字符的外键名。

在涉及多个源的复制设置中，无论源或副本MySQL服务器的数量如何，都不支持使用两个以上的MySQL服务器版本。这一限制不仅适用于发行系列，也适用于同一发行系列中的版本号。例如，如果您使用的是链式或循环复制设置，则不能同时使用MySQL 8.0.22、MySQL 8.0.24和MySQL 8.0.28，尽管您可以同时使用这两个版本中的任何一个。

重要的

强烈建议使用给定MySQL版本系列中可用的最新版本，因为复制（和其他）功能正在不断改进。还建议将使用MySQL发布系列早期版本的源和副本升级为GA（生产）版本，如果后者可用于该发布系列。

从MySQL 8.0.14开始，最初提交事务的服务器的每个事务的服务器版本都记录在二进制日志中([`原始服务器版本`](replication-options-source.html#sysvar_original_server_version))，以及作为复制拓扑中当前服务器的直接源的服务器([`即时服务器版本`](replication-options-source.html#sysvar_immediate_server_version)).

从较新的源复制到较旧的副本是可能的，但通常不受支持。这是由许多因素造成的：

-   **二进制日志格式更改。**二进制日志格式可以在主要版本之间更改。虽然我们试图保持向后兼容性，但这并不总是可能的。源还可能启用了旧副本无法理解的可选功能，例如二进制日志事务压缩，在MySQL 8.0.20之前的版本中，副本无法读取生成的压缩事务有效负载。

    这对升级复制服务器也有重大影响；看见[第17.5.3节，“升级复制拓扑”](replication-upgrade.html)，以获取更多信息。

-   有关基于行的复制的更多信息，请参阅[第17.2.1节，“复制格式”](replication-formats.html).

-   **SQL不兼容。**如果要复制的语句使用源上而不是副本上可用的SQL功能，则无法使用基于语句的复制从较新的源复制到较旧的副本。

    但是，如果源和副本都支持基于行的复制，并且没有要复制的数据定义语句依赖于源上而不是副本上的SQL功能，那么即使副本不支持在源上运行DDL，也可以使用基于行的复制来复制数据修改语句的效果。

    在MySQL 8.0.26中，对复制检测名称进行了不兼容的更改，包括线程阶段的名称，其中包含术语“master”，改为“source”，“slave”，改为“replica”，以及“mts”（表示“多线程从机”），改为“mta”（表示“多线程应用程序”）。使用这些检测名称的监视工具可能会受到影响。如果不兼容的更改对您有影响，请设置[`术语使用`](replication-options-replica.html#sysvar_terminology_use_previous)系统变量到`在8 0 26之前`要使MySQL服务器使用上一个列表中指定的对象的旧版本名称。这使得依赖旧名称的监视工具能够继续工作，直到它们可以更新为使用新名称为止。

    有关潜在复制问题的更多信息，请参阅[第17.5.1节，“复制功能和问题”](replication-features.html).
