文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  组复制限制

20.3.2 组复制限制

组复制存在以下已知限制。请注意,在单主模式集群中,在故障转移事件期间,针对多主模式组描述的限制和问题也可能适用,而新当选的主服务器会从旧主服务器刷新其应用队列。

提示

组复制建立在基于 GTID 的复制之上,因此您还应该了解 第 19.1.3.7 节,“使用 GTID 进行复制的限制”

  • --upgrade=MINIMAL 选项。  在使用 MINIMAL 选项 (--upgrade=MINIMAL) 升级 MySQL 服务器后,无法启动组复制,该选项不会升级复制内部依赖的系统表。

  • 间隙锁。  组复制针对并发事务的认证过程没有考虑 间隙锁,因为间隙锁信息在 InnoDB 之外不可用。有关更多信息,请参见 间隙锁

    注意

    对于处于多主模式的组,除非您的应用程序依赖于 REPEATABLE READ 语义,否则我们建议使用 READ COMMITTED 隔离级别与组复制一起使用。InnoDB 在 READ COMMITTED 中不使用间隙锁,这使 InnoDB 中的本地冲突检测与组复制执行的分布式冲突检测相一致。对于处于单主模式的组,只有主服务器接受写入,因此 READ COMMITTED 隔离级别对组复制并不重要。

  • 表锁和命名锁。  认证过程没有考虑表锁(请参见 第 15.3.6 节,“LOCK TABLES 和 UNLOCK TABLES 语句”)或命名锁(请参见 GET_LOCK())。

  • 二进制日志校验和。  MySQL 9.0 中的组复制支持校验和,因此组成员可以使用默认设置 binlog_checksum=CRC32binlog_checksum 的设置不必在组的所有成员中都相同。

    当校验和可用时,组复制不会使用它们来验证 group_replication_applier 频道上的传入事件,因为事件是从多个来源写入到该中继日志的,并且在它们实际写入到源服务器的二进制日志之前,这是生成校验和的时候。校验和用于验证 group_replication_recovery 频道以及组成员上的任何其他复制频道上的事件的完整性。

  • SERIALIZABLE 隔离级别。  默认情况下,多主组不支持 SERIALIZABLE 隔离级别。将事务隔离级别设置为 SERIALIZABLE 会配置组复制以拒绝提交事务。

  • 并发 DDL 与 DML 操作。  在使用多主模式时,不支持针对同一对象但在不同服务器上执行的并发数据定义语句和数据操作语句。在对对象执行数据定义语言 (DDL) 语句期间,在同一对象但不同服务器实例上执行并发数据操作语言 (DML) 会存在这样的风险,即在不同实例上执行的冲突 DDL 无法检测到。

  • 具有级联约束的外键。  多主模式组(所有成员都配置为 group_replication_single_primary_mode=OFF)不支持具有多级外键依赖关系的表,特别是定义了 CASCADING 外键约束 的表。这是因为导致多主模式组执行级联操作的外键约束可能会导致未检测到的冲突,并导致组成员之间的数据不一致。因此,我们建议在多主模式组中使用的服务器实例上设置 group_replication_enforce_update_everywhere_checks=ON,以避免未检测到的冲突。

    在单主模式下,这不是问题,因为它不允许对组的多个成员进行并发写入,因此不存在未检测到的冲突风险。

  • 多主模式死锁。  当组以多主模式运行时,SELECT .. FOR UPDATE 语句会导致死锁。这是因为锁在组成员之间没有共享,因此可能无法达到对这种语句的预期。

  • 复制过滤器。  无法在配置了组复制的 MySQL 服务器实例上使用全局复制过滤器,因为在某些服务器上过滤事务会使组无法就一致状态达成一致。特定于频道的复制过滤器可以在与组复制无关的复制频道上使用,例如,组成员也充当对组外部源的副本的实例。它们不能在 group_replication_appliergroup_replication_recovery 频道上使用。

  • 加密连接。  支持 TLSv1.3 协议,前提是使用 OpenSSL 1.1.1 或更高版本编译它。组复制支持 TLSv1.3,它可用于组通信连接和分布式恢复连接。

    group_replication_recovery_tls_versiongroup_replication_recovery_tls_ciphersuites 可用于配置客户端对任何密码套件选择的支持,包括根据需要仅使用非默认密码套件。有关详细信息,请参阅 第 8.3.2 节,“加密连接 TLS 协议和密码”

  • 克隆操作。 组复制发起并管理分布式恢复的克隆操作,但已设置为支持克隆的组成员也可以参与用户手动发起的克隆操作。如果操作涉及运行组复制的组成员,则可以手动发起克隆操作,前提是克隆操作不会删除和替换接收方上的数据。因此,如果运行组复制,启动克隆操作的语句必须包含 DATA DIRECTORY 子句。有关详细信息,请参阅 第 20.5.4.2.4 节,“用于其他目的的克隆”

组大小限制

单个复制组中可以作为成员的 MySQL 服务器的最大数量为 9。如果更多成员尝试加入该组,则会拒绝其请求。该限制已通过测试和基准测试确定为组在稳定的局域网中可靠运行的安全边界。

事务大小限制

如果单个事务导致的消息内容过大,以至于消息无法在 5 秒钟内通过网络在组成员之间复制,则成员可能会被怀疑已故障并被逐出,仅仅是因为它们忙于处理事务。大型事务还会导致系统由于内存分配问题而变慢。为避免这些问题,请使用以下缓解措施

最大事务大小、消息压缩和消息碎片化都可以通过为相关系统变量指定零值来停用。如果您已停用所有这些安全措施,则复制组成员上的应用线程可以处理的最大消息大小限制是该成员的 replica_max_allowed_packet 系统变量的值,该变量的默认值和最大值为 1073741824 字节(1 GB)。当接收成员尝试处理超出此限制的消息时,该消息将失败。组成员可以发起并尝试传输到组的最大消息大小限制为 4294967295 字节(约 4 GB)。这是组复制 (XCom,一种 Paxos 变体) 的组通信引擎接受的包大小的硬性限制,该引擎在 GCS 处理完消息后接收消息。当发起成员尝试广播超出此限制的消息时,该消息将失败。