暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

17.1.3.4 Restrictions on Replication with GTIDs

原创 由迪 2020-02-28
477

由于基于GTID的复制依赖于事务,因此在使用它时不支持MySQL中原本可用的某些功能。本节提供有关GTID复制限制和限制的信息。

涉及非事务性存储引擎的更新。 使用GTID时,MyISAM 无法在与使用事务存储引擎(例如)进行的表更新相同的语句或事务中对使用非事务存储引擎(例如)进行的表更新 InnoDB。

此限制是由于以下事实:在同一事务中对使用非事务性存储引擎的表的更新与对使用事务性存储引擎的表的更新混合在一起可能导致将多个GTID分配给同一事务。

当主服务器和从属服务器针对同一表的各自版本使用不同的存储引擎时,也会出现此类问题,其中一个存储引擎是事务性的,而另一个则不是事务性的。

在上述任何情况下,事务和GTID之间的一对一对应关系都被破坏,结果是基于GTID的复制无法正确运行。

CREATE TABLE … SELECT语句。 CREATE TABLE … SELECT基于语句的复制不安全。使用基于行的复制时,该语句实际上记录为两个单独的事件-一个用于创建表,另一个用于将源表中的行插入到刚刚创建的新表中。当在事务中执行该语句时,在某些情况下,这两个事件可能会接收到相同的事务标识符,这意味着从服务器会跳过包含插入内容的事务。因此, CREATE TABLE … SELECT使用基于GTID的复制时不支持。

临时表。 使用GTID时(即使用该 选项启动服务器时),事务内部不支持CREATE TEMPORARY TABLEand DROP TEMPORARY TABLE语句 --enforce-gtid-consistency。可以在启用了GTID的情况下使用这些语句,但只能在任何事务之外且仅在时使用 autocommit=1。

防止执行不受支持的语句。 为了防止执行会导致基于GTID的复制失败的语句,–enforce-gtid-consistency 在启用GTID时,必须使用该选项启动所有服务器 。这会导致本节前面讨论的任何类型的语句失败,并显示错误。

有关启用GTID时其他必需的启动选项的信息,请参见第17.1.3.2节“使用GTID设置复制”。

sql_slave_skip_counter使用GTID时不支持。如果需要跳过事务,请改用master gtid_executed变量的值 。有关更多信息,请参见注入空事务。

GTID模式和mysqldump。 在MySQL 5.6.9及更高版本中,如果目标服务器的二进制日志中没有GTID ,则可以将使用mysqldump创建的转储导入到启用了GTID模式的MySQL服务器中。

在MySQL 5.6.9之前,mysqldump不记录全局事务ID,因此必须使用二进制日志和mysqlbinlog还原GTID。(缺陷#14797808,错误#14832472)

GTID模式和mysql_upgrade。 在此之前的MySQL 5.6.7,mysql_upgrade无法连接到使用全局事务标识符(GTIDs)运行MySQL服务器启用(gtid_mode=ON),除非 mysql_upgrade与运行 --write-binlog=OFF。否则,必须先使用 mysqldgtid_mode=OFF在运行mysql_upgrade之前重新启动,然后再使用 mysql_upgrade重新启动 gtid_mode=ON。在MySQL 5.6.7及更高版本中,默认情况下mysql_upgrade 运行–write-binlog=OFF。(错误#13833710)。当服务器以(gtid_mode=ON)运行时,请勿启用此选项。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论