本节列出了组复制插件特有的系统变量。
每个组复制系统变量的名称都以 group_replication_
为前缀。
InnoDB 集群使用组复制,但组复制系统变量的默认值可能与此处记录的默认值不同。例如,在 InnoDB 集群中,group_replication_communication_stack
的默认值为 MYSQL
,而不是默认组复制实现中的 XCOM
。
有关更多信息,请参阅 MySQL InnoDB 集群。
组复制组成员上的一些系统变量,包括一些组复制特定的系统变量和一些通用系统变量,是组范围的配置设置。这些系统变量在所有组成员上必须具有相同的值,并且需要完全重新启动组(由具有 group_replication_bootstrap_group=ON
的服务器引导)才能使值更改生效。有关在每个成员都已停止的情况下重新启动组的说明,请参阅 第 20.5.2 节,“重启组”。
如果正在运行的组为组范围的配置设置设置了一个值,而加入的成员为该系统变量设置了不同的值,则加入的成员将无法加入该组,直到该值更改为匹配为止。如果该组为其中一个系统变量设置了值,而加入的成员不支持该系统变量,则它无法加入该组。
以下系统变量是组范围的配置设置
group_replication_communication_stack
(组复制自身的检查未对其进行策略控制的特殊情况;有关详细信息,请参阅系统变量说明)
组范围的配置设置无法在组复制运行时通过通常的方法更改,但可以使用 group_replication_switch_to_single_primary_mode()
和 group_replication_switch_to_multi_primary_mode()
函数在组仍在运行时更改 group_replication_single_primary_mode
和 group_replication_enforce_update_everywhere_checks
的值。有关更多信息,请参阅 第 20.5.1.2 节,“更改组模式”。
大多数组复制系统变量在不同的组成员上可以具有不同的值。为了避免不必要地回滚事务、消息传递失败或消息恢复失败,建议对以下系统变量在组的所有成员上设置相同的值
group_replication_preemptive_garbage_collection
的值在所有组成员上必须相同。
大多数组复制系统变量都被描述为动态的,并且它们的值可以在服务器运行时更改。但是,在大多数情况下,只有在使用 STOP GROUP_REPLICATION
语句后跟 START GROUP_REPLICATION
语句停止并重新启动组成员上的组复制后,更改才会生效。对以下系统变量的更改无需停止和重新启动组复制即可生效
更改任何组复制系统变量的值时,请记住,如果在某个时间点通过 STOP GROUP_REPLICATION
语句或系统关闭在每个成员上同时停止了组复制,则必须像第一次启动时那样通过引导来重新启动该组。有关安全执行此操作的说明,请参阅 第 20.5.2 节,“重启组”。对于组范围的配置设置,这是必需的,但如果要更改其他设置,请尽量确保始终至少有一个成员正在运行。
如果在服务器启动期间将一些组复制系统变量作为命令行参数传递给服务器,则不会完全验证这些变量。这些系统变量包括
group_replication_group_name
、group_replication_single_primary_mode
、group_replication_force_members
、SSL 变量和流控制系统变量。只有在服务器启动后才会完全验证它们。指定组成员的 IP 地址或主机名的组复制系统变量,要等到发出
START GROUP_REPLICATION
语句后才会验证。在此之前,组复制的组通信系统 (GCS) 无法验证这些值。
此处列出了特定于组复制插件的服务器系统变量,以及它们的功能或用途的说明:列出
group_replication_advertise_recovery_endpoints
命令行格式 --group-replication-advertise-recovery-endpoints=值
系统变量 group_replication_advertise_recovery_endpoints
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 默认值 DEFAULT
可以在组复制运行时更改此系统变量的值。更改将立即在成员上生效。但是,已接收系统变量先前值的加入成员将继续使用该值。只有在值更改后加入的成员才会接收新值。
group_replication_advertise_recovery_endpoints
指定加入成员如何建立与现有成员的连接,以便为分布式恢复进行状态转移。该连接用于远程克隆操作和从捐赠者二进制日志进行状态转移。值
DEFAULT
(默认设置)表示加入成员使用现有成员的标准 SQL 客户端连接,如 MySQL 服务器的hostname
和port
系统变量所指定。如果report_port
系统变量指定了备用端口号,则使用该端口号。Performance Schema 表replication_group_members
的MEMBER_HOST
和MEMBER_PORT
字段中显示此连接的地址和端口号。您可以指定一个或多个分布式恢复端点,而不是
DEFAULT
,现有成员会将这些端点通告给加入成员以供其使用。提供分布式恢复端点,管理员可以将分布式恢复流量与到组成员的常规 MySQL 客户端连接分开控制。加入成员会按照在列表中指定的顺序依次尝试每个端点。将分布式恢复端点指定为以逗号分隔的 IP 地址和端口号列表,例如
group_replication_advertise_recovery_endpoints= "127.0.0.1:3306,127.0.0.1:4567,[::1]:3306,localhost:3306"
IPv4 和 IPv6 地址和主机名可以组合使用。IPv6 地址必须在方括号中指定。主机名必须解析为本地 IP 地址。不能使用通配符地址格式,并且不能指定空列表。请注意,标准 SQL 客户端连接不会自动包含在分布式恢复端点列表中。如果要将其用作端点,则必须将其显式包含在列表中。
有关如何选择 IP 地址和端口作为分布式恢复端点,以及加入成员如何使用它们的详细信息,请参阅 第 20.5.4.1.1 节“为分布式恢复端点选择地址”。以下是要求摘要
IP 地址不必为 MySQL 服务器配置,但必须分配给服务器。
必须使用
port
、report_port
或admin_port
系统变量为 MySQL 服务器配置端口。如果使用
admin_port
,则分布式恢复的复制用户需要相应的权限。不需要将 IP 地址添加到
group_replication_ip_allowlist
系统变量指定的组复制允许列表中。连接的 SSL 要求由
group_replication_recovery_ssl_*
选项指定。
group_replication_allow_local_lower_version_join
命令行格式 --group-replication-allow-local-lower-version-join[={OFF|ON}]
已弃用 是 系统变量 group_replication_allow_local_lower_version_join
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 布尔值 默认值 OFF
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
即使当前服务器运行的 MySQL 服务器版本低于组版本,
group_replication_allow_local_lower_version_join
也允许其加入组。使用默认设置OFF
时,如果服务器运行的版本低于现有组成员,则不允许其加入复制组。此标准策略可确保组的所有成员都能交换消息并应用事务。请注意,运行 MySQL 8.0.17 或更高版本的成员在检查其兼容性时会考虑发行版的补丁版本。运行 MySQL 8.0.16 或更早版本的成员仅考虑主要版本。仅在以下情况下才将
group_replication_allow_local_lower_version_join
设置为ON
必须紧急将服务器添加到组中以提高组的容错能力,并且只有旧版本可用。
您想要回滚一个或多个复制组成员的升级,而无需关闭整个组并再次引导它。
警告将此选项设置为
ON
不会使新成员与组兼容,并允许其加入组,而不会对现有成员的不兼容行为采取任何保护措施。要确保新成员的正确操作,请采取以下 两种 预防措施在运行较低版本的服务器加入组之前,请停止该服务器上的所有写入操作。
从运行较低版本的服务器加入组的那一刻起,停止组中其他服务器上的所有写入操作。
如果没有这些预防措施,运行较低版本的服务器可能会遇到困难并因错误而终止。
group_replication_auto_increment_increment
命令行格式 --group-replication-auto-increment-increment=#
系统变量 group_replication_auto_increment_increment
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 7
最小值 1
最大值 65535
此系统变量在所有组成员上应具有相同的值。组复制运行时,不能更改此系统变量的值。您必须停止组复制,更改系统变量的值,然后在每个组成员上重新启动组复制。在此过程中,允许系统变量的值在组成员之间有所不同,但组成员上的某些事务可能会回滚。
group_replication_auto_increment_increment
确定在此服务器实例上执行的事务的自动递增列的连续值之间的间隔。添加间隔可避免为组成员上的写入选择重复的自动递增值,从而导致事务回滚。默认值 7 表示可用值的数量与允许的最大复制组大小(9 个成员)之间的平衡。如果您的组成员数量更多或更少,则可以在启动组复制之前设置此系统变量以匹配预期的组成员数量。重要当
group_replication_single_primary_mode
为ON
时,设置group_replication_auto_increment_increment
无效。在服务器实例上启动组复制时,服务器系统变量
auto_increment_increment
的值将更改为此值,服务器系统变量auto_increment_offset
的值将更改为服务器 ID。停止组复制时,更改将恢复。仅当auto_increment_increment
和auto_increment_offset
的默认值均为 1 时,才会进行和恢复这些更改。如果它们的值已从默认值修改,则组复制不会更改它们。当组复制处于单主模式(其中只有一个服务器写入)时,也不会修改系统变量。group_replication_autorejoin_tries
命令行格式 --group-replication-autorejoin-tries=#
系统变量 group_replication_autorejoin_tries
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 3
最小值 0
最大值 2016
可以在组复制运行时更改此系统变量的值,并且更改会立即生效。当出现需要该行为的问题时,将读取系统变量的当前值。
group_replication_autorejoin_tries
指定如果成员被驱逐,或者在达到group_replication_unreachable_majority_timeout
设置之前无法联系到大多数成员,则该成员尝试自动重新加入组的次数。当达到成员的驱逐或无法访问的大多数超时时,它会尝试重新加入(使用当前插件选项值),然后继续进行进一步的自动重新加入尝试,直到达到指定的尝试次数。自动重新加入尝试失败后,成员将在下一次尝试之前等待 5 分钟。如果指定的尝试次数已用尽,但成员没有重新加入或被停止,则成员将继续执行group_replication_exit_state_action
系统变量指定的操作。在自动重新加入尝试期间和两次尝试之间,成员保持超级只读模式,不接受写入,但仍然可以在成员上进行读取,但随着时间的推移,过时读取的可能性会越来越大。如果您不能容忍任何时间段内出现过时读取的可能性,请将
group_replication_autorejoin_tries
设置为 0。有关自动重新加入功能以及为该选项选择值时的注意事项的详细信息,请参阅 第 20.7.7.3 节“自动重新加入”。group_replication_bootstrap_group
命令行格式 --group-replication-bootstrap-group[={OFF|ON}]
系统变量 group_replication_bootstrap_group
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 布尔值 默认值 OFF
通过将
group_replication_bootstrap_group
配置为该服务器,可以引导组。此系统变量必须仅在一台服务器上设置,并且仅在首次启动组或重新启动整个组时设置。引导组后,请将此选项设置为OFF
。应在配置文件中以及动态地将其设置为OFF
。在组运行时,如果在两台服务器上设置此选项或在一台服务器上重新启动此选项,则可能会导致人为的脑裂情况,在这种情况下,将引导两个具有相同名称的独立组。有关首次引导组的说明,请参阅 第 20.2.1.5 节“引导组”。有关在已执行和验证交易的情况下安全引导组的说明,请参阅 第 20.5.2 节“重新启动组”。
group_replication_clone_threshold
命令行格式 --group-replication-clone-threshold=#
系统变量 group_replication_clone_threshold
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 9223372036854775807
最小值 1
最大值 9223372036854775807
单位 交易 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_clone_threshold
指定交易差距(以交易数量表示),该差距位于现有成员(捐赠者)和加入成员(接收者)之间,在分布式恢复过程中,该差距会触发对加入成员的状态传输使用远程克隆操作。如果加入成员和合适的捐赠者之间的交易差距超过阈值,则组复制将使用远程克隆操作开始分布式恢复。如果交易差距低于阈值,或者如果远程克隆操作在技术上不可行,则组复制将直接从捐赠者的二进制日志进行状态传输。警告请勿在活动组中对
group_replication_clone_threshold
使用低设置。如果在远程克隆操作正在进行时,组中发生的数量超过阈值的交易,则加入成员将在重新启动后再次触发远程克隆操作,并且可以无限期地继续执行此操作。为避免这种情况,请确保将阈值设置为大于您希望在远程克隆操作期间在组中发生的交易数量。要使用此功能,必须事先设置捐赠者和加入成员以支持克隆。有关说明,请参阅 第 20.5.4.2 节“用于分布式恢复的克隆”。执行远程克隆操作时,组复制将为您管理它,包括所需的服务器重新启动,前提是设置了
group_replication_start_on_boot=ON
。如果不是,则必须手动重新启动服务器。远程克隆操作将替换加入成员上的现有数据字典,但如果加入成员具有其他组成员上不存在的其他交易,则组复制将进行检查并且不会继续进行,因为这些交易将被克隆操作擦除。默认设置(这是 GTID 中交易允许的最大序列号)意味着实际上始终尝试从捐赠者的二进制日志进行状态传输,而不是克隆。但是,请注意,如果无法从捐赠者的二进制日志进行状态传输,例如,因为任何现有组成员的二进制日志中都没有加入成员所需的交易,则组复制始终会尝试执行克隆操作,而不管您的阈值如何。如果根本不想在复制组中使用克隆,请不要在成员上安装克隆插件。
group_replication_communication_debug_options
命令行格式 --group-replication-communication-debug-options=值
系统变量 group_replication_communication_debug_options
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 默认值 GCS_DEBUG_NONE
允许的值 GCS_DEBUG_NONE
GCS_DEBUG_BASIC
GCS_DEBUG_TRACE
XCOM_DEBUG_BASIC
XCOM_DEBUG_TRACE
GCS_DEBUG_ALL
可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_communication_debug_options
配置要为不同的组复制组件(例如组通信系统 (GCS) 和组通信引擎(XCom,Paxos 变体))提供的调试消息的级别。调试信息存储在数据目录中的GCS_DEBUG_TRACE
文件中。可以组合指定为字符串的可用选项集。可以使用以下选项
GCS_DEBUG_NONE
禁用 GCS 和 XCom 的所有调试级别。GCS_DEBUG_BASIC
启用 GCS 中的基本调试信息。GCS_DEBUG_TRACE
启用 GCS 中的跟踪信息。XCOM_DEBUG_BASIC
启用 XCom 中的基本调试信息。XCOM_DEBUG_TRACE
启用 XCom 中的跟踪信息。GCS_DEBUG_ALL
启用 GCS 和 XCom 的所有调试级别。
仅当在不提供任何其他选项的情况下提供调试级别时,将其设置为
GCS_DEBUG_NONE
才有效。将调试级别设置为GCS_DEBUG_ALL
将覆盖所有其他选项。group_replication_communication_max_message_size
命令行格式 --group-replication-communication-max-message-size=#
系统变量 group_replication_communication_max_message_size
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 10485760
最小值 0
最大值 1073741824
单位 字节 此系统变量在所有组成员上应具有相同的值。组复制运行时,不能更改此系统变量的值。您必须停止组复制,更改系统变量的值,然后在每个组成员上重新启动组复制。在此过程中,允许系统变量的值在组成员之间有所不同,但组成员上的某些事务可能会回滚。
group_replication_communication_max_message_size
指定组复制通信的最大消息大小。大于此大小的消息将自动拆分为片段,这些片段将分别发送并由接收者重新组装。有关更多信息,请参阅 第 20.7.5 节“消息分片”。默认情况下,最大消息大小设置为 10485760 字节(10 MiB),这意味着默认情况下使用分片。允许的最大值与
replica_max_allowed_packet
系统变量的最大值相同,即 1073741824 字节(1 GB)。group_replication_communication_max_message_size
的设置必须小于replica_max_allowed_packet
的设置,因为应用线程无法处理大于允许的最大数据包大小的消息片段。要关闭分片,请为group_replication_communication_max_message_size
指定零值。为了使复制组的成员可以使用分片,组的通信协议版本必须为 MySQL 8.0.16 或更高版本。使用
group_replication_get_communication_protocol()
函数查看组的通信协议版本。如果使用的是较低版本,则组成员不会对消息进行分片。如果所有组成员都支持,您可以使用group_replication_set_communication_protocol()
函数将组的通信协议设置为更高版本。有关更多信息,请参阅 第 20.5.1.4 节“设置组的通信协议版本”。group_replication_communication_stack
系统变量 group_replication_communication_stack
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 默认值 XCOM
允许的值 XCOM
MYSQL
注意此系统变量实际上是组范围的配置设置;尽管可以在运行时对其进行设置,但是要使任何更改生效,都需要完全重新引导复制组。
group_replication_communication_stack
指定是使用 XCom 通信堆栈还是 MySQL 通信堆栈在成员之间建立组通信连接。XCom 通信堆栈是组复制自己的实现,不支持身份验证或网络命名空间。MySQL 通信堆栈是 MySQL 服务器的本机实现,支持身份验证和网络命名空间,并在发布后立即访问新的安全功能。组的所有成员必须使用相同的通信堆栈。当您使用 MySQL 通信堆栈代替 XCom 时,MySQL 服务器将使用其自己的身份验证和加密协议建立组成员之间的每个连接。
设置组以使用 MySQL 的通信堆栈时,需要进行其他配置;请参阅 第 20.6.1 节“用于连接安全管理的通信堆栈”。
group_replication_communication_stack
实际上是组范围的配置设置,并且该设置在所有组成员上必须相同。但是,这不受组复制本身对组范围配置设置的检查的限制。值与组中其他成员不同的成员根本无法与其他成员通信,因为通信协议不兼容,因此它无法交换有关其配置设置的信息。这意味着,尽管可以在组复制运行时更改系统变量的值,并在您在组成员上重新启动组复制后生效,但是该成员仍然无法重新加入组,直到在所有成员上都更改了该设置。因此,您必须停止所有成员上的组复制并在所有成员上更改系统变量的值,然后才能重新启动组。由于所有成员均已停止,因此需要完全重新引导组(由具有
group_replication_bootstrap_group=ON
的服务器引导)才能使值更改生效。有关从一个通信堆栈迁移到另一个通信堆栈的说明,请参阅 第 20.6.1 节“用于连接安全管理的通信堆栈”。group_replication_components_stop_timeout
命令行格式 --group-replication-components-stop-timeout=#
系统变量 group_replication_components_stop_timeout
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 300
最小值 2
最大值 31536000
单位 秒 可以在组复制运行时更改此系统变量的值,但是仅当您在组成员上停止并重新启动组复制后,更改才会生效。
group_replication_components_stop_timeout
指定在关闭时组复制等待其每个模块完成正在进行的进程的时间(以秒为单位)。组件超时在发出STOP GROUP_REPLICATION
语句后应用,该语句在服务器重新启动或自动重新加入期间自动发生。超时用于解决无法正常停止组复制组件的情况,如果在成员处于错误状态或在诸如 MySQL Enterprise Backup 之类的进程在成员上的表上持有全局锁时将该成员从组中驱逐,则可能会发生这种情况。在这种情况下,成员无法停止应用线程或完成分布式恢复过程以重新加入。
STOP GROUP_REPLICATION
在以下情况之前不会完成:问题得到解决(例如,通过释放锁),或者组件超时到期并且模块被关闭,而不管其状态如何。默认值为 300 秒,因此如果在此时间之前未解决问题,则会在 5 分钟后停止组复制组件,从而允许成员重新启动并重新加入。
group_replication_compression_threshold
命令行格式 --group-replication-compression-threshold=#
系统变量 group_replication_compression_threshold
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 1000000
最小值 0
最大值 4294967295
单位 字节 以字节为单位的阈值,高于此阈值将对组成员之间发送的消息应用压缩。如果此系统变量设置为零,则禁用压缩。
group_replication_compression_threshold
的值在所有组成员上应相同。组复制使用 LZ4 压缩算法压缩组中发送的消息。请注意,LZ4 压缩算法支持的最大输入大小为 2113929216 字节。此限制低于
group_replication_compression_threshold
系统变量的最大可能值,该值与 XCom 接受的最大消息大小相匹配。使用 LZ4 压缩算法时,请勿为group_replication_compression_threshold
设置大于 2113929216 字节的值,因为启用消息压缩时,无法提交大于此大小的事务。有关详细信息,请参见第 20.7.4 节,“消息压缩”。
-
命令行格式 --group-replication-consistency=value
系统变量 group_replication_consistency
作用域 全局,会话 动态 是 SET_VAR
提示是否适用否 类型 枚举 默认值 BEFORE_ON_PRIMARY_FAILOVER
允许的值 EVENTUAL
BEFORE_ON_PRIMARY_FAILOVER
BEFORE
AFTER
BEFORE_AND_AFTER
此系统变量的值可以在组复制运行时更改。
group_replication_consistency
是服务器系统变量,而不是组复制插件特有的变量,因此更改生效不需要重新启动组复制。更改系统变量的会话值会立即生效,而更改全局值则会对更改后启动的新会话生效。更改此系统变量的全局设置需要GROUP_REPLICATION_ADMIN
权限。group_replication_consistency
控制组提供的事务一致性保证。您可以全局或按事务配置一致性。group_replication_consistency
还配置了单主组中新选举的主节点使用的隔离机制。必须针对只读 (RO) 和读写 (RW) 事务考虑变量的影响。以下列表按事务一致性保证的升序显示了此变量的可能值EVENTUAL
RO 和 RW 事务在执行之前都不会等待先前的事务应用。这是添加此变量之前组复制的行为。RW 事务不会等待其他成员应用事务。这意味着事务可以在其他成员之前在一个成员上外部化。这也意味着,如果主节点发生故障转移,则新主节点可以在应用先前的主节点事务之前接受新的 RO 和 RW 事务。RO 事务可能会导致值过时,而 RW 事务可能会因冲突而导致回滚。
BEFORE_ON_PRIMARY_FAILOVER
来自正在应用旧主节点积压工作的新选举主节点的新 RO 或 RW 事务将保持(不应用)状态,直到应用了任何积压工作。这可确保在有意或无意发生主节点故障转移时,客户端始终会在主节点上看到最新值。这保证了一致性,但意味着客户端必须能够处理应用积压工作时的延迟。通常,此延迟应该很小,但取决于积压工作的大小。
BEFORE
RW 事务在应用之前会等待所有先前的事务完成。RO 事务在执行之前会等待所有先前的事务完成。这可确保此事务仅通过影响事务的延迟来读取最新值。通过确保仅对 RO 事务使用同步,这减少了每个 RW 事务上的同步开销。此一致性级别还包括
BEFORE_ON_PRIMARY_FAILOVER
提供的一致性保证。AFTER
RW 事务会等到其更改应用于所有其他成员为止。此值对 RO 事务没有影响。此模式可确保在本地成员上提交事务时,任何后续事务都可以在任何组成员上读取写入的值或更新的值。对主要用于 RO 操作的组使用此模式,以确保已应用的 RW 事务在提交后随处应用。您的应用程序可以使用此模式来确保后续读取获取包含最新写入的最新数据。通过确保仅对 RW 事务使用同步,这减少了每个 RO 事务上的同步开销。此一致性级别还包括
BEFORE_ON_PRIMARY_FAILOVER
提供的一致性保证。BEFORE_AND_AFTER
RW 事务在应用之前会等待所有先前的事务完成,并等到其更改已应用于其他成员。RO 事务在执行之前会等待所有先前的事务完成。此一致性级别还包括
BEFORE_ON_PRIMARY_FAILOVER
提供的一致性保证。
有关详细信息,请参见第 20.5.3 节,“事务一致性保证”。
group_replication_enforce_update_everywhere_checks
命令行格式 --group-replication-enforce-update-everywhere-checks[={OFF|ON}]
系统变量 group_replication_enforce_update_everywhere_checks
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 布尔值 默认值 OFF
注意此系统变量是一个组范围的配置设置,更改生效需要完全重新启动复制组。
group_replication_enforce_update_everywhere_checks
启用或禁用对多主节点更新无处不在的严格一致性检查。默认情况下,检查处于禁用状态。在单主节点模式下,必须在所有组成员上禁用此选项。在多主节点模式下,启用此选项后,将按如下方式检查语句以确保它们与多主节点模式兼容如果在
SERIALIZABLE
隔离级别下执行事务,则当它与组同步时,其提交将失败。如果事务针对具有带有级联约束的外键的表执行,则当它与组同步时,该事务将无法提交。
此系统变量是一个组范围的配置设置。它在所有组成员上必须具有相同的值,并且在组复制运行时无法更改,并且需要完全重新启动组(由具有
group_replication_bootstrap_group=ON
的服务器引导)才能使值更改生效。有关在已执行和验证事务的情况下安全引导组的说明,请参见第 20.5.2 节,“重新启动组”。如果为该组设置了此系统变量的值,并且加入的成员为该系统变量设置了不同的值,则在将该值更改为匹配之前,该加入的成员将无法加入该组。如果为组成员设置了此系统变量的值,并且加入的成员不支持该系统变量,则它无法加入该组。
使用
group_replication_switch_to_single_primary_mode()
和group_replication_switch_to_multi_primary_mode()
函数可以在组仍在运行时更改此系统变量的值。有关详细信息,请参见第 20.5.1.2 节,“更改组模式”。group_replication_exit_state_action
命令行格式 --group-replication-exit-state-action=value
系统变量 group_replication_exit_state_action
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 枚举 默认值 OFFLINE_MODE
允许的值 ABORT_SERVER
OFFLINE_MODE
READ_ONLY
可以在组复制运行时更改此系统变量的值,并且更改会立即生效。当出现需要该行为的问题时,将读取系统变量的当前值。
group_replication_exit_state_action
配置当此服务器实例意外离开组时的组复制行为,例如在遇到应用程序错误之后,或者在失去多数的情况下,或者当组的另一个成员由于怀疑超时而将其驱逐时。在失去多数的情况下,成员离开组的超时时间由group_replication_unreachable_majority_timeout
系统变量设置,怀疑的超时时间由group_replication_member_expel_timeout
系统变量设置。请注意,被驱逐的组成员在其重新连接到组之前不知道它已被驱逐,因此只有在成员设法重新连接或成员对其自身产生怀疑并将其自身驱逐时,才会执行指定的操作。当组成员由于怀疑超时或失去多数而被驱逐时,如果该成员的
group_replication_autorejoin_tries
系统变量设置为指定自动重新加入尝试次数,则它首先在超级只读模式下进行指定次数的尝试,然后执行group_replication_exit_state_action
指定的操作。在出现应用程序错误的情况下,不会尝试自动重新加入,因为这些错误是不可恢复的。当
group_replication_exit_state_action
设置为READ_ONLY
时,如果成员意外退出组或自动重新加入尝试次数已用尽,则实例会将 MySQL 切换到超级只读模式(通过将系统变量super_read_only
设置为ON
)。当
group_replication_exit_state_action
设置为OFFLINE_MODE
时,如果成员意外退出组或自动重新加入尝试次数已用尽,则实例会将 MySQL 切换到离线模式(通过将系统变量offline_mode
设置为ON
)。在此模式下,连接的客户端用户将在下次请求时断开连接,并且不再接受连接,但具有CONNECTION_ADMIN
权限(或已弃用的SUPER
权限)的客户端用户除外。组复制还会将系统变量super_read_only
设置为ON
,因此即使客户端使用CONNECTION_ADMIN
或SUPER
权限连接,也无法进行任何更新。当
group_replication_exit_state_action
设置为ABORT_SERVER
时,如果成员意外退出组或自动重新加入尝试次数已用尽,则实例会关闭 MySQL。重要如果在成员成功加入组之前发生故障,则不会执行指定的退出操作不会被采取。如果在本地配置检查期间出现故障,或者加入成员的配置与组的配置不匹配,则会出现这种情况。在这些情况下,
super_read_only
系统变量将保留其原始值,连接将继续被接受,并且服务器不会关闭 MySQL。为了确保在组复制未启动时服务器无法接受更新,我们建议在启动时在服务器的配置文件中设置super_read_only=ON
,组复制会在成功启动后将其在主成员上更改为OFF
。当服务器配置为在服务器启动时启动组复制(group_replication_start_on_boot=ON
)时,此安全措施尤为重要,但在使用START GROUP_REPLICATION
命令手动启动组复制时也很有用。有关使用此选项的更多信息,以及执行退出操作的所有情况的完整列表,请参阅第 20.7.7.4 节,“退出操作”。
group_replication_flow_control_applier_threshold
命令行格式 --group-replication-flow-control-applier-threshold=#
系统变量 group_replication_flow_control_applier_threshold
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 25000
最小值 0
最大值 2147483647
单位 交易 可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_flow_control_applier_threshold
指定应用程序队列中触发流控制的等待事务数。group_replication_flow_control_certifier_threshold
命令行格式 --group-replication-flow-control-certifier-threshold=#
系统变量 group_replication_flow_control_certifier_threshold
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 25000
最小值 0
最大值 2147483647
单位 交易 可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_flow_control_certifier_threshold
指定证书队列中触发流控制的等待事务数。group_replication_flow_control_hold_percent
命令行格式 --group-replication-flow-control-hold-percent=#
系统变量 group_replication_flow_control_hold_percent
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 10
最小值 0
最大值 100
单位 百分比 可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_flow_control_hold_percent
定义组配额中保留多少百分比未使用,以允许处于流控制下的集群赶上积压工作。值为 0 表示没有为赶上工作积压而保留配额。group_replication_flow_control_max_quota
命令行格式 --group-replication-flow-control-max-quota=#
系统变量 group_replication_flow_control_max_quota
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 0
最小值 0
最大值 2147483647
可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_flow_control_max_quota
定义组的最大流控制配额,或启用流控制时任何期间的最大可用配额。值为 0 表示未设置最大配额。此系统变量的值不能小于group_replication_flow_control_min_quota
和group_replication_flow_control_min_recovery_quota
。group_replication_flow_control_member_quota_percent
命令行格式 --group-replication-flow-control-member-quota-percent=#
系统变量 group_replication_flow_control_member_quota_percent
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 0
最小值 0
最大值 100
单位 百分比 可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_flow_control_member_quota_percent
定义在计算配额时,成员应该假设自身可用的配额百分比。值为 0 表示配额应在上一个期间是写入器的成员之间平均分配。group_replication_flow_control_min_quota
命令行格式 --group-replication-flow-control-min-quota=#
系统变量 group_replication_flow_control_min_quota
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 0
最小值 0
最大值 2147483647
可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_flow_control_min_quota
控制可以分配给成员的最低流控制配额,独立于上一个期间执行的计算出的最低配额。值为 0 表示没有最低配额。此系统变量的值不能大于group_replication_flow_control_max_quota
。group_replication_flow_control_min_recovery_quota
命令行格式 --group-replication-flow-control-min-recovery-quota=#
系统变量 group_replication_flow_control_min_recovery_quota
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 0
最小值 0
最大值 2147483647
可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_flow_control_min_recovery_quota
控制由于组中另一个正在恢复的成员而可以分配给成员的最低配额,独立于上一个期间执行的计算出的最低配额。值为 0 表示没有最低配额。此系统变量的值不能大于group_replication_flow_control_max_quota
。group_replication_flow_control_mode
命令行格式 --group-replication-flow-control-mode=值
系统变量 group_replication_flow_control_mode
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 枚举 默认值 配额
允许的值 禁用
配额
可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_flow_control_mode
指定用于流控制的模式。group_replication_flow_control_period
命令行格式 --group-replication-flow-control-period=#
系统变量 group_replication_flow_control_period
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 1
最小值 1
最大值 60
单位 秒 可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_flow_control_period
定义流控制迭代之间等待的秒数,在流控制迭代中发送流控制消息并运行流控制管理任务。group_replication_flow_control_release_percent
命令行格式 --group-replication-flow-control-release-percent=#
系统变量 group_replication_flow_control_release_percent
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 50
最小值 0
最大值 1000
单位 百分比 可以在组复制运行时更改此系统变量的值,并且更改会立即生效。
group_replication_flow_control_release_percent
定义当流控制不再需要限制写入器成员时,应如何释放组配额,此百分比是每个流控制期间的配额增加量。值为 0 表示一旦流控制阈值在限制范围内,配额就会在单个流控制迭代中释放。该范围允许配额最多释放到当前配额的 10 倍,因为这允许更大程度的适应,主要是在流控制期间较大且配额非常小时。group_replication_force_members
命令行格式 --group-replication-force-members=值
系统变量 group_replication_force_members
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 此系统变量用于强制新的组成员资格。此系统变量的值可以在组复制运行时更改,并且更改会立即生效。您只需要在要保留在组中的一个组成员上设置系统变量的值即可。有关您可能需要强制新的组成员资格的情况的详细信息,以及使用此系统变量时要遵循的过程,请参阅第 20.7.8 节,“处理网络分区和仲裁丢失”。
group_replication_force_members
指定对等地址列表,以逗号分隔,例如主机1:端口1
、主机2:端口2
。未包含在列表中的任何现有成员都不会收到新的组视图,并且会被阻止。对于要继续作为成员的每个现有成员,您必须包括 IP 地址或主机名以及端口,因为它们在每个成员的group_replication_local_address
系统变量中给出(而不是种子成员的 SQL 客户端连接,如 MySQL Server 的hostname
和port
系统变量中指定)。IPv6 地址必须在方括号中指定。例如"198.51.100.44:33061,[2001:db8:85a3:8d3:1319:8a2e:370:7348]:33061,example.org:33061"
组复制 (XCom) 的组通信引擎检查提供的 IP 地址是否为有效格式,并检查您是否包含了当前无法访问的任何组成员。否则,不会验证新配置,因此您必须小心,仅包含作为组的可访问成员的在线服务器。列表中的任何错误值或无效主机名都可能导致组因无效配置而被阻止。
在强制执行新的成员资格配置之前,务必确保要排除的服务器已关闭。如果它们未关闭,请先关闭它们,然后再继续。仍然在线的组成员可以自动形成新的配置,如果这已经发生,强制执行另一个新的配置可能会为组创建一个人为的脑裂情况。
在您使用
group_replication_force_members
系统变量成功强制执行新的组成员资格并解除对组的阻止后,请确保清除该系统变量。group_replication_force_members
必须为空,才能发出START GROUP_REPLICATION
语句。-
命令行格式 --group-replication-group-name=值
系统变量 group_replication_group_name
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 此系统变量的值在组复制运行时不能更改。
group_replication_group_name
指定此服务器实例所属的组的名称,该名称必须是有效的 UUID。此 UUID 构成 GTID 的一部分,当组成员从客户端接收到的交易以及组成员内部生成的视图更改事件写入二进制日志时,将使用这些 GTID。重要必须使用唯一的 UUID。
-
命令行格式 --group-replication-group-seeds=值
系统变量 group_replication_group_seeds
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_group_seeds
是一个组成员列表,加入成员可以连接到这些成员以获取所有当前组成员的详细信息。加入成员使用这些详细信息来选择组成员并连接到该成员,以获取与组同步所需的数据。该列表包含每个包含的种子成员的单个内部网络地址或主机名,如种子成员的group_replication_local_address
系统变量中配置的那样(而不是种子成员的 SQL 客户端连接,如 MySQL Server 的hostname
和port
系统变量中指定)。种子成员的地址指定为以逗号分隔的列表,例如主机1:端口1
、主机2:端口2
。IPv6 地址必须在方括号中指定。例如group_replication_group_seeds= "198.51.100.44:33061,[2001:db8:85a3:8d3:1319:8a2e:370:7348]:33061, example.org:33061"
请注意,您为此变量指定的值在发出
START GROUP_REPLICATION
语句并且组通信系统 (GCS) 可用之前不会被验证。通常,此列表包含组的所有成员,但您可以选择组成员的子集作为种子。该列表必须至少包含一个有效的成员地址。每个地址在启动组复制时都会被验证。如果该列表不包含任何有效的成员地址,则发出
START GROUP_REPLICATION
将会失败。当服务器加入复制组时,它会尝试连接到其
group_replication_group_seeds
系统变量中列出的第一个种子成员。如果连接被拒绝,则加入的成员会尝试按顺序连接到列表中的其他每个种子成员。如果加入的成员连接到种子成员但结果没有被添加到复制组中(例如,因为种子成员的允许列表中没有加入的成员的地址并关闭了连接),则加入的成员会继续尝试按顺序连接列表中剩余的种子成员。加入的成员必须使用种子成员在
group_replication_group_seeds
选项中公布的相同协议(IPv4 或 IPv6)与种子成员进行通信。出于组复制的 IP 地址权限的目的,种子成员上的允许列表必须包含加入的成员的 IP 地址(用于种子成员提供的协议)或解析为该协议地址的主机名。除了加入成员的group_replication_local_address
之外,还必须设置并允许此地址或主机名,如果该地址的协议与种子成员公布的协议不匹配。如果加入的成员没有相应协议的允许地址,则其连接尝试将被拒绝。有关更多信息,请参阅第 20.6.4 节“组复制 IP 地址权限”。 group_replication_gtid_assignment_block_size
命令行格式 --group-replication-gtid-assignment-block-size=#
系统变量 group_replication_gtid_assignment_block_size
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 1000000
最小值 1
最大值(64 位平台) 9223372036854775807
最大值(32 位平台) 4294967295
注意此系统变量是一个组范围的配置设置,更改生效需要完全重新启动复制组。
group_replication_gtid_assignment_block_size
指定为每个组成员保留的连续 GTID 数量。每个成员消耗自己的块并在需要时保留更多块。此系统变量是一个组范围的配置设置。它在所有组成员上必须具有相同的值,并且在组复制运行时无法更改,并且需要完全重新启动组(由具有
group_replication_bootstrap_group=ON
的服务器引导)才能使值更改生效。有关在已执行和验证事务的情况下安全引导组的说明,请参见第 20.5.2 节,“重新启动组”。如果为该组设置了此系统变量的值,并且加入的成员为该系统变量设置了不同的值,则在将该值更改为匹配之前,该加入的成员将无法加入该组。如果为组成员设置了此系统变量的值,并且加入的成员不支持该系统变量,则它无法加入该组。
group_replication_ip_allowlist
命令行格式 --group-replication-ip-allowlist=value
系统变量 group_replication_ip_allowlist
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 默认值 AUTOMATIC
group_replication_ip_allowlist
指定允许哪些主机连接到组。当组使用 XCom 通信堆栈时(group_replication_communication_stack=XCOM
),允许列表用于控制对组的访问。当组使用 MySQL 通信堆栈时(group_replication_communication_stack=MYSQL
),用户身份验证用于控制对组的访问,并且如果设置了允许列表,则不会使用该列表,并且会被忽略。您在
group_replication_local_address
中为每个组成员指定的地址必须在复制组中的其他服务器上获得允许。请注意,您为此变量指定的值在发出START GROUP_REPLICATION
语句并且组通信系统 (GCS) 可用之前不会被验证。默认情况下,此系统变量设置为
AUTOMATIC
,这允许来自主机上活动的专用子网的连接。组复制的组通信引擎 (XCom) 会自动扫描主机上的活动接口,并识别那些地址位于专用子网上的接口。这些地址和 IPv4 和 IPv6 的localhost
IP 地址用于创建组复制允许列表。有关自动允许地址范围的列表,请参阅第 20.6.4 节“组复制 IP 地址权限”。专用地址的自动允许列表不能用于来自专用网络外部服务器的连接。对于位于不同机器上的服务器实例之间的组复制连接,您必须提供公共 IP 地址并将它们指定为显式允许列表。如果为允许列表指定任何条目,则不会自动添加专用地址,因此如果您使用其中任何一个,则必须明确指定它们。
localhost
IP 地址会自动添加。作为
group_replication_ip_allowlist
选项的值,您可以指定以下各项的任意组合IPv4 地址(例如,
198.51.100.44
)采用 CIDR 表示法的 IPv4 地址(例如,
192.0.2.21/24
)IPv6 地址(例如,
2001:db8:85a3:8d3:1319:8a2e:370:7348
)采用 CIDR 表示法的 IPv6 地址(例如,
2001:db8:85a3:8d3::/64
)主机名(例如,
example.org
)采用 CIDR 表示法的地址(例如,
www.example.com/24
)
主机名可以解析为 IPv4 地址、IPv6 地址或两者兼而有之。如果主机名同时解析为 IPv4 和 IPv6 地址,则始终将 IPv4 地址用于组复制连接。您可以将 CIDR 表示法与主机名或 IP 地址结合使用,以允许具有特定网络前缀的 IP 地址块,但要确保指定子网中的所有 IP 地址都在您的控制之下。
允许列表中的每个条目之间必须用逗号分隔。例如
"192.0.2.21/24,198.51.100.44,203.0.113.0/24,2001:db8:85a3:8d3:1319:8a2e:370:7348,example.org,www.example.com/24"
如果在加入成员具有 IPv4
group_replication_local_address
时,group_replication_group_seeds
选项中列出了任何具有 IPv6 地址的组种子成员,或者反之亦然,则您还必须为加入成员设置并允许用于种子成员提供的协议的备用地址(或解析为该协议地址的主机名)。有关更多信息,请参阅第 20.6.4 节“组复制 IP 地址权限”。可以根据您的安全要求在不同的组成员上配置不同的允许列表,例如,为了将不同的子网分开。但是,这会在重新配置组时导致问题。如果您没有特定的安全要求,请在组的所有成员上使用相同的允许列表。有关更多详细信息,请参阅第 20.6.4 节“组复制 IP 地址权限”。
对于主机名,仅当另一台服务器发出连接请求时才会进行名称解析。无法解析的主机名不会被考虑用于允许列表验证,并且会将警告消息写入错误日志。对已解析的主机名执行正向确认的反向 DNS (FCrDNS) 验证。
警告在允许列表中,主机名本质上不如 IP 地址安全。FCrDNS 验证提供了一个良好的保护级别,但可能会被某些类型的攻击所破坏。仅在绝对必要时才在允许列表中指定主机名,并确保用于名称解析的所有组件(例如 DNS 服务器)都在您的控制之下维护。您还可以使用主机文件在本地实现名称解析,以避免使用外部组件。
group_replication_local_address
命令行格式 --group-replication-local-address=value
系统变量 group_replication_local_address
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_local_address
设置成员为来自其他成员的连接提供的网络地址,指定为host:port
格式的字符串。该地址必须可由组的所有成员访问,因为它由组复制的组通信引擎(XCom,一种 Paxos 变体)用于远程 XCom 实例之间的 TCP 通信。如果您正在使用 MySQL 通信堆栈在成员之间建立组通信连接(group_replication_communication_stack
= MYSQL),则该地址必须是 MySQL Server 正在侦听的 IP 地址和端口之一,如服务器的bind_address
系统变量所指定。警告不要使用此地址来查询或管理成员上的数据库。这不是 SQL 客户端连接主机和端口。
您在
group_replication_local_address
中指定的地址或主机名由组复制用作复制组中组成员的唯一标识符。只要主机名或 IP 地址都不同,您就可以对复制组的所有成员使用相同的端口,并且只要端口都不同,您就可以对所有成员使用相同的主机名或 IP 地址。推荐的group_replication_local_address
端口是 33061。请注意,您为此变量指定的值在发出START GROUP_REPLICATION
语句并且组通信系统 (GCS) 可用之前不会被验证。group_replication_local_address
配置的网络地址必须可由所有组成员解析。例如,如果每个服务器实例都位于具有固定网络地址的不同机器上,则可以使用该机器的 IP 地址,例如 10.0.0.1。如果您使用主机名,则必须使用完全限定名称,并确保可以通过 DNS、正确配置的/etc/hosts
文件或其他名称解析过程来解析它。必须在方括号中指定 IPv6 地址,以便区分端口号,例如group_replication_local_address= "[2001:db8:85a3:8d3:1319:8a2e:370:7348]:33061"
如果指定为服务器实例的组复制本地地址的主机名同时解析为 IPv4 和 IPv6 地址,则始终将 IPv4 地址用于组复制连接。有关组复制对 IPv6 网络的支持以及成员使用 IPv4 和成员使用 IPv6 的混合复制组的更多信息,请参阅第 20.5.5 节“对 IPv6 以及混合 IPv6 和 IPv4 组的支持”。
如果您正在使用 XCom 通信堆栈在成员之间建立组通信连接(
group_replication_communication_stack = XCOM
),则您在group_replication_local_address
中为每个组成员指定的地址必须添加到复制组中其他服务器上的group_replication_ip_allowlist
系统变量的列表中。当组使用 XCom 通信堆栈时,允许列表用于控制对组的访问。当组使用 MySQL 通信堆栈时,用户身份验证用于控制对组的访问,并且如果设置了允许列表,则不会使用该列表,并且会被忽略。请注意,如果在该成员具有 IPv4group_replication_local_address
时,group_replication_group_seeds
选项中列出了任何具有 IPv6 地址的组种子成员,或者反之亦然,则您还必须为此成员设置并允许用于所需协议的备用地址(或解析为该协议地址的主机名)。有关更多信息,请参阅第 20.6.4 节“组复制 IP 地址权限”。group_replication_member_expel_timeout
命令行格式 --group-replication-member-expel-timeout=#
系统变量 group_replication_member_expel_timeout
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 5
最小值 0
最大值 3600
单位 秒 可以在组复制运行时更改此系统变量的值,并且更改会立即生效。每当组复制检查超时时,都会读取系统变量的当前值。并非组中的所有成员都必须具有相同的设置,但建议这样做以避免意外驱逐。
group_replication_member_expel_timeout
指定在创建怀疑后,组复制组成员在将怀疑失败的成员驱逐出组之前等待的时间段(以秒为单位)。创建怀疑之前的初始 5 秒检测时间段不计入此时间。group_replication_member_expel_timeout
的值默认为 5,这意味着怀疑的成员在 5 秒检测时间段后 5 秒内可能会被驱逐。更改组成员上的
group_replication_member_expel_timeout
的值会立即对该组成员上的现有怀疑和未来怀疑生效。因此,您可以将其用作强制怀疑超时并驱逐可疑成员的方法,从而允许更改组配置。有关更多信息,请参阅 第 20.7.7.1 节,“驱逐超时”。增加
group_replication_member_expel_timeout
的值有助于避免在较慢或不太稳定的网络上,或者在预期会出现瞬态网络中断或机器速度减慢的情况下进行不必要的驱逐。如果可疑成员在怀疑超时之前再次变为活动状态,它将应用其余组成员缓冲的所有消息,并进入ONLINE
状态,无需操作员干预。您可以指定最长 3600 秒(1 小时)的超时值。重要的是要确保 XCom 的消息缓存足够大,以包含指定时间段内的预期消息量,再加上初始 5 秒检测时间段,否则成员将无法重新连接。您可以使用group_replication_message_cache_size
系统变量调整缓存大小限制。有关更多信息,请参阅 第 20.7.6 节,“XCom 缓存管理”。如果超过超时时间,则可疑成员在怀疑超时后立即可能会被驱逐。如果成员能够恢复通信并接收到一个视图,其中它被驱逐,并且该成员的
group_replication_autorejoin_tries
系统变量设置为指定自动重新加入尝试次数,则它将继续以超级只读模式进行指定次数的尝试以重新加入组。如果该成员没有指定任何自动重新加入尝试,或者如果它已用尽指定次数的尝试,则它将遵循系统变量group_replication_exit_state_action
指定的操作。有关使用
group_replication_member_expel_timeout
设置的更多信息,请参阅 第 20.7.7.1 节,“驱逐超时”。有关避免在此系统变量不可用时不必要驱逐的替代缓解策略,请参阅 第 20.3.2 节,“组复制限制”。group_replication_member_weight
命令行格式 --group-replication-member-weight=#
系统变量 group_replication_member_weight
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 50
最小值 0
最大值 100
单位 百分比 可以在组复制运行时更改此系统变量的值,并且更改会立即生效。发生故障转移情况时,将读取系统变量的当前值。
group_replication_member_weight
指定可以分配给成员的百分比权重,以影响在发生故障转移时(例如,当现有主服务器离开单主服务器组时)成员被选为主服务器的几率。为成员分配数字权重以确保选择特定成员,例如在主服务器的定期维护期间,或者确保在发生故障转移时优先考虑某些硬件。对于具有如下配置成员的组
成员-1
:group_replication_member_weight=30,server_uuid=aaaa成员-2
:group_replication_member_weight=40,server_uuid=bbbb成员-3
:group_replication_member_weight=40,server_uuid=cccc成员-4
:group_replication_member_weight=40,server_uuid=dddd
在新主服务器的选举过程中,上述成员将被排序为
成员-2
、成员-3
、成员-4
和成员-1
。这导致在发生故障转移时选择成员
-2 作为新的主服务器。有关更多信息,请参阅 第 20.1.3.1 节,“单主模式”。group_replication_message_cache_size
命令行格式 --group-replication-message-cache-size=#
系统变量 group_replication_message_cache_size
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 1073741824 (1 GB)
最小值 134217728 (128 MB)
最大值(64 位平台) 18446744073709551615 (16 EiB)
最大值(32 位平台) 315360004294967295 (4 GB)
单位 字节 此系统变量在所有组成员上应具有相同的值。可以在组复制运行时更改此系统变量的值。在您停止并重新启动成员上的组复制后,更改将在每个组成员上生效。在此过程中,允许系统变量的值在组成员之间有所不同,但在断开连接的情况下,成员可能无法重新连接。
group_replication_message_cache_size
设置组复制 (XCom) 的组通信引擎中消息缓存可用的最大内存量。XCom 消息缓存保存作为共识协议的一部分在组成员之间交换的消息(及其元数据)。除其他功能外,消息缓存还用于在无法与其他组成员通信一段时间后重新连接到组的成员恢复丢失的消息。group_replication_member_expel_timeout
系统变量确定除初始 5 秒检测时间段外,允许成员返回组而不是被驱逐的等待时间(最多一小时)。XCom 消息缓存的大小应参考此时间段内的预期消息量进行设置,以便它包含成员成功返回所需的所有丢失消息。默认值是在 5 秒检测时间段后等待 5 秒,总时间段为 10 秒。考虑到 MySQL 服务器的其他缓存和对象池的大小,请确保您的系统上有足够的可用内存用于您选择的缓存大小限制。默认设置为 1073741824 字节(1 GB)。134217728 字节(128 MB)的最小设置允许在可用内存量有限的主机上部署,并具有良好的网络连接,以最大限度地减少组成员瞬态连接丢失的频率和持续时间。请注意,使用
group_replication_message_cache_size
设置的限制仅适用于存储在缓存中的数据,缓存结构需要额外的 50 MB 内存。缓存大小限制可以在运行时动态增加或减少。如果减小缓存大小限制,XCom 将删除已确定并传递的最旧条目,直到当前大小低于限制。当一条消息(当前无法访问的成员可能需要该消息进行恢复)从消息缓存中删除时,组复制的组通信系统 (GCS) 会通过警告消息向您发出警报。有关调整消息缓存大小的更多信息,请参阅 第 20.7.6 节,“XCom 缓存管理”。
group_replication_paxos_single_leader
命令行格式 --group-replication-paxos-single-leader[={OFF|ON}]
系统变量 group_replication_paxos_single_leader
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 布尔值 默认值 OFF
注意此系统变量是一个组范围的配置设置,更改生效需要完全重新启动复制组。
当组处于单主模式时,
group_replication_paxos_single_leader
允许组通信引擎使用单个共识领导者进行操作。使用默认设置OFF
时,此行为将被禁用,并且组的每个成员都将用作领导者,这是在此系统变量可用之前的版本中的行为。当系统变量设置为ON
时,组通信引擎可以使用单个领导者来推动共识。使用单个共识领导者进行操作可以提高单主模式下的性能和弹性,尤其是在组中的一些辅助成员当前无法访问时。有关更多信息,请参阅 第 20.7.3 节,“单个共识领导者”。为了使组通信引擎能够使用单个共识领导者,组的通信协议版本必须为 MySQL 8.0.27 或更高版本。使用
group_replication_get_communication_protocol()
函数查看组的通信协议版本。如果使用的是较低版本,则组无法使用此行为。如果所有组成员都支持,则可以使用group_replication_set_communication_protocol()
函数将组的通信协议设置为更高版本。有关更多信息,请参阅 第 20.5.1.4 节,“设置组的通信协议版本”。此系统变量是一个组范围的配置设置。它在所有组成员上必须具有相同的值,并且在组复制运行时无法更改,并且需要完全重新启动组(由具有
group_replication_bootstrap_group=ON
的服务器引导)才能使值更改生效。有关在已执行和验证事务的情况下安全引导组的说明,请参见第 20.5.2 节,“重新启动组”。如果为该组设置了此系统变量的值,并且加入的成员为该系统变量设置了不同的值,则在将该值更改为匹配之前,该加入的成员将无法加入该组。如果为组成员设置了此系统变量的值,并且加入的成员不支持该系统变量,则它无法加入该组。
即使当前在查询的成员上将
group_replication_paxos_single_leader
设置为OFF
,性能架构表replication_group_communication_information
中的字段WRITE_CONSENSUS_SINGLE_LEADER_CAPABLE
也显示该组是否支持使用单个领导者。如果使用group_replication_paxos_single_leader
设置为ON
启动该组,并且其通信协议版本为 MySQL 8.0.27 或更高版本,则该字段设置为 1。group_replication_poll_spin_loops
命令行格式 --group-replication-poll-spin-loops=#
系统变量 group_replication_poll_spin_loops
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 0
最小值 0
最大值(64 位平台) 18446744073709551615
最大值(32 位平台) 4294967295
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_poll_spin_loops
指定组通信线程在等待更多传入网络消息之前等待通信引擎互斥锁释放的次数。group_replication_preemptive_garbage_collection
命令行格式 --group-replication-preemptive-garbage-collection[=ON|OFF]
系统变量 group_replication_preemptive_garbage_collection
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 布尔值 默认值 OFF
在单主模式下(仅限)启用抢占式垃圾回收,仅保留那些尚未在数据库中提交的事务的写入集。
只有当组复制未运行时才能更改此系统变量的值,并且该变量对以多主模式运行的组没有影响。要从多主模式更改为单主模式,请使用
group_replication_switch_to_single_primary_mode()
函数;有关更多信息,请参阅第 20.5.1.2 节“更改组模式”。group_replication_preemptive_garbage_collection
必须在所有组成员上设置为相同的值。新加入者的group_replication_preemptive_garbage_collection
值必须与该组所有当前成员的值相同,否则它无法加入。运行 8.4 之前版本的 MySQL 的组成员不发送
group_replication_preemptive_garbage_collection
值;在这种情况下,该值被视为OFF
。group_replication_preemptive_garbage_collection_rows_threshold
命令行格式 --group-replication-preemptive-garbage-collection-rows-threshold=#
系统变量 group_replication_preemptive_garbage_collection_rows_threshold
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 100000
最小值 10000
最大值 100000000
当启用单主模式下的抢占式垃圾回收时(
group_replication_preemptive_garbage_collection
为ON
),这是触发其使用所需的认证信息行数。此变量对以多主模式运行的组没有影响。
group_replication_recovery_compression_algorithms
命令行格式 --group-replication-recovery-compression-algorithms=值
系统变量 group_replication_recovery_compression_algorithms
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 设置 默认值 未压缩
允许的值 zlib
zstd
未压缩
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_compression_algorithms
指定组复制分布式恢复连接允许的压缩算法,用于从捐赠者的二进制日志进行状态转移。可用算法与protocol_compression_algorithms
系统变量相同。有关更多信息,请参阅第 6.2.8 节“连接压缩控制”。如果服务器已设置为支持克隆(请参阅第 20.5.4.2 节“用于分布式恢复的克隆”)并且在分布式恢复期间使用了远程克隆操作,则此设置不适用。对于此状态转移方法,将应用克隆插件的
clone_enable_compression
设置。group_replication_recovery_get_public_key
命令行格式 --group-replication-recovery-get-public-key[={OFF|ON}]
系统变量 group_replication_recovery_get_public_key
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 布尔值 默认值 OFF
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_get_public_key
指定是否从源请求基于 RSA 密钥对密码交换所需的公钥。如果group_replication_recovery_public_key_path
设置为有效的公钥文件,则它优先于group_replication_recovery_get_public_key
。如果您没有对group_replication_recovery
通道上的分布式恢复使用 SSL(group_replication_recovery_use_ssl=ON
),并且组复制的复制用户帐户使用caching_sha2_password
插件(默认)进行身份验证,则此变量适用。有关更多详细信息,请参阅第 20.6.3.1.1 节“使用缓存 SHA-2 身份验证插件的复制用户”。group_replication_recovery_public_key_path
命令行格式 --group-replication-recovery-public-key-path=文件名
系统变量 group_replication_recovery_public_key_path
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 文件名 默认值 空字符串
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_public_key_path
指定包含源所需的基于 RSA 密钥对密码交换的公钥副本的文件的路径名。该文件必须为 PEM 格式。如果group_replication_recovery_public_key_path
设置为有效的公钥文件,则它优先于group_replication_recovery_get_public_key
。如果您没有对group_replication_recovery
通道上的分布式恢复使用 SSL(因此group_replication_recovery_use_ssl
设置为OFF
),并且组复制的复制用户帐户使用caching_sha2_password
插件(默认)或sha256_password
插件进行身份验证,则此变量适用。(对于sha256_password
,仅当使用 OpenSSL 构建 MySQL 时,设置group_replication_recovery_public_key_path
才适用。)有关更多详细信息,请参阅第 20.6.3.1.1 节“使用缓存 SHA-2 身份验证插件的复制用户”。group_replication_recovery_reconnect_interval
命令行格式 --group-replication-recovery-reconnect-interval=#
系统变量 group_replication_recovery_reconnect_interval
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 60
最小值 0
最大值 31536000
单位 秒 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_reconnect_interval
指定在组中找不到合适的捐赠者进行分布式恢复时,重新连接尝试之间的睡眠时间(以秒为单位)。group_replication_recovery_retry_count
命令行格式 --group-replication-recovery-retry-count=#
系统变量 group_replication_recovery_retry_count
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 10
最小值 0
最大值 31536000
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_retry_count
指定正在加入的成员在放弃之前尝试连接到可用的捐赠者进行分布式恢复的次数。group_replication_recovery_ssl_ca
命令行格式 --group-replication-recovery-ssl-ca=值
系统变量 group_replication_recovery_ssl_ca
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_ssl_ca
指定包含用于分布式恢复连接的可信任 SSL 证书颁发机构列表的文件的路径。有关为分布式恢复配置 SSL 的信息,请参阅第 20.6.2 节“使用安全套接字层 (SSL) 保护组通信连接”。如果此服务器已设置为支持克隆(请参阅第 20.5.4.2 节“用于分布式恢复的克隆”),并且您已将
group_replication_recovery_use_ssl
设置为ON
,则组复制会自动将克隆 SSL 选项clone_ssl_ca
的设置配置为与您的group_replication_recovery_ssl_ca
设置匹配。当 MySQL 通信堆栈用于组时(
group_replication_communication_stack = MYSQL
),此设置用于组通信连接以及分布式恢复连接的 TLS/SSL 配置。group_replication_recovery_ssl_capath
命令行格式 --group-replication-recovery-ssl-capath=值
系统变量 group_replication_recovery_ssl_capath
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_ssl_capath
指定包含用于分布式恢复连接的可信任 SSL 证书颁发机构证书的目录的路径。有关为分布式恢复配置 SSL 的信息,请参阅第 20.6.2 节“使用安全套接字层 (SSL) 保护组通信连接”。当 MySQL 通信堆栈用于组时(
group_replication_communication_stack = MYSQL
),此设置用于组通信连接以及分布式恢复连接的 TLS/SSL 配置。group_replication_recovery_ssl_cert
命令行格式 --group-replication-recovery-ssl-cert=值
系统变量 group_replication_recovery_ssl_cert
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_ssl_cert
指定用于建立安全连接以进行分布式恢复的 SSL 证书文件的名称。有关为分布式恢复配置 SSL 的信息,请参阅第 20.6.2 节“使用安全套接字层 (SSL) 保护组通信连接”。如果此服务器已设置为支持克隆(请参阅第 20.5.4.2 节“用于分布式恢复的克隆”),并且您已将
group_replication_recovery_use_ssl
设置为ON
,则组复制会自动将克隆 SSL 选项clone_ssl_cert
的设置配置为与您的group_replication_recovery_ssl_cert
设置匹配。当 MySQL 通信堆栈用于组时(
group_replication_communication_stack = MYSQL
),此设置用于组通信连接以及分布式恢复连接的 TLS/SSL 配置。group_replication_recovery_ssl_cipher
命令行格式 --group-replication-recovery-ssl-cipher=值
系统变量 group_replication_recovery_ssl_cipher
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_ssl_cipher
指定 SSL 加密允许的密码列表。有关为分布式恢复配置 SSL 的信息,请参阅第 20.6.2 节“使用安全套接字层 (SSL) 保护组通信连接”。当 MySQL 通信堆栈用于组时(
group_replication_communication_stack = MYSQL
),此设置用于组通信连接以及分布式恢复连接的 TLS/SSL 配置。group_replication_recovery_ssl_crl
命令行格式 --group-replication-recovery-ssl-crl=值
系统变量 group_replication_recovery_ssl_crl
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 文件名 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_ssl_crl
指定包含证书吊销列表文件的目录的路径。有关为分布式恢复配置 SSL 的信息,请参阅第 20.6.2 节“使用安全套接字层 (SSL) 保护组通信连接”。当 MySQL 通信堆栈用于组时(
group_replication_communication_stack = MYSQL
),此设置用于组通信连接以及分布式恢复连接的 TLS/SSL 配置。group_replication_recovery_ssl_crlpath
命令行格式 --group-replication-recovery-ssl-crlpath=值
系统变量 group_replication_recovery_ssl_crlpath
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 目录名 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_ssl_crlpath
指定包含证书吊销列表文件的目录的路径。有关为分布式恢复配置 SSL 的信息,请参阅第 20.6.2 节“使用安全套接字层 (SSL) 保护组通信连接”。当 MySQL 通信堆栈用于组时(
group_replication_communication_stack = MYSQL
),此设置用于组通信连接以及分布式恢复连接的 TLS/SSL 配置。group_replication_recovery_ssl_key
命令行格式 --group-replication-recovery-ssl-key=值
系统变量 group_replication_recovery_ssl_key
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_ssl_key
指定用于建立安全连接的 SSL 密钥文件的名称。有关为分布式恢复配置 SSL 的信息,请参见 第 20.6.2 节 “使用安全套接字层 (SSL) 保护组通信连接”。如果此服务器已设置为支持克隆(请参见 第 20.5.4.2 节 “用于分布式恢复的克隆”),并且您已将
group_replication_recovery_use_ssl
设置为ON
,则组复制会自动将克隆 SSL 选项clone_ssl_key
的设置配置为与group_replication_recovery_ssl_key
的设置相匹配。当 MySQL 通信堆栈用于组时(
group_replication_communication_stack = MYSQL
),此设置用于组通信连接以及分布式恢复连接的 TLS/SSL 配置。group_replication_recovery_ssl_verify_server_cert
命令行格式 --group-replication-recovery-ssl-verify-server-cert[={OFF|ON}]
系统变量 group_replication_recovery_ssl_verify_server_cert
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 布尔值 默认值 OFF
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_ssl_verify_server_cert
指定分布式恢复连接是否应检查捐赠者发送的证书中的服务器通用名称值。有关为分布式恢复配置 SSL 的信息,请参见 第 20.6.2 节 “使用安全套接字层 (SSL) 保护组通信连接”。当 MySQL 通信堆栈用于组时(
group_replication_communication_stack = MYSQL
),此设置用于组通信连接以及分布式恢复连接的 TLS/SSL 配置。group_replication_recovery_tls_ciphersuites
命令行格式 --group-replication-recovery-tls-ciphersuites=值
系统变量 group_replication_recovery_tls_ciphersuites
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 默认值 NULL
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
当对分布式恢复连接使用 TLSv1.3 进行连接加密时,
group_replication_recovery_tls_ciphersuites
指定一个或多个允许的密码套件的冒号分隔列表,并且此服务器实例是分布式恢复连接中的客户端,即加入的成员。如果在使用 TLSv1.3(如果您未设置系统变量,则为默认值)时将此系统变量设置为NULL
,则允许使用默认启用的密码套件,如 第 8.3.2 节 “加密连接 TLS 协议和密码” 中所列。如果将此系统变量设置为空字符串,则不允许使用任何密码套件,因此不使用 TLSv1.3。有关为分布式恢复配置 SSL 的信息,请参见 第 20.6.2 节 “使用安全套接字层 (SSL) 保护组通信连接”。当 MySQL 通信堆栈用于组时(
group_replication_communication_stack = MYSQL
),此设置用于组通信连接以及分布式恢复连接的 TLS/SSL 配置。group_replication_recovery_tls_version
命令行格式 --group-replication-recovery-tls-version=值
系统变量 group_replication_recovery_tls_version
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 默认值 TLSv1.2,TLSv1.3
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
当此服务器实例是分布式恢复连接中的客户端(即加入的成员)时,
group_replication_recovery_tls_version
指定一个或多个允许的 TLS 协议的逗号分隔列表,用于连接加密。作为客户端(加入的成员)和服务器(捐赠者)参与每个分布式恢复连接的组成员协商他们都设置为支持的最高协议版本。当 MySQL 通信堆栈用于组时(
group_replication_communication_stack = MYSQL
),此设置用于组通信连接以及分布式恢复连接的 TLS/SSL 配置。默认值为 “
TLSv1.2,TLSv1.3
”。确保指定的协议版本是连续的,序列中间没有跳过的版本号。重要MySQL 8.0 中已弃用对 TLSv1 和 TLSv1.1 连接协议的支持,并在之后从 MySQL 服务器中删除。有关更多信息,请参见 移除对 TLSv1 和 TLSv1.1 协议的支持。
如果 MySQL 服务器是使用 OpenSSL 1.1.1 编译的,则 MySQL 9.0 中支持 TLSv1.3 协议。服务器会在启动时检查 OpenSSL 的版本,如果低于 1.1.1,则会从系统变量的默认值中删除 TLSv1.3。在这种情况下,默认值为 “
TLSv1.2
”。组复制支持 TLSv1.3,并支持密码套件选择。有关更多信息,请参见 第 20.6.2 节 “使用安全套接字层 (SSL) 保护组通信连接”。
有关为分布式恢复配置 SSL 的信息,请参见 第 20.6.2 节 “使用安全套接字层 (SSL) 保护组通信连接”。
group_replication_recovery_use_ssl
命令行格式 --group-replication-recovery-use-ssl[={OFF|ON}]
系统变量 group_replication_recovery_use_ssl
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 布尔值 默认值 OFF
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_use_ssl
指定组复制的组成员之间的分布式恢复连接是否应使用 SSL。有关为分布式恢复配置 SSL 的信息,请参见 第 20.6.2 节 “使用安全套接字层 (SSL) 保护组通信连接”。如果此服务器已设置为支持克隆(请参见 第 20.5.4.2 节 “用于分布式恢复的克隆”),并且您将此选项设置为
ON
,则组复制会将 SSL 用于远程克隆操作以及从捐赠者的二进制日志进行状态传输。如果将此选项设置为OFF
,则组复制不会将 SSL 用于远程克隆操作。group_replication_recovery_zstd_compression_level
命令行格式 --group-replication-recovery-zstd-compression-level=#
系统变量 group_replication_recovery_zstd_compression_level
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 3
最小值 1
最大值 22
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_recovery_zstd_compression_level
指定对使用zstd
压缩算法的组复制分布式恢复连接使用的压缩级别。允许的级别为 1 到 22,值越大表示压缩级别越高。默认的zstd
压缩级别为 3。对于不使用zstd
压缩的分布式恢复连接,此变量无效。有关更多信息,请参见 第 6.2.8 节 “连接压缩控制”。
group_replication_single_primary_mode
命令行格式 --group-replication-single-primary-mode[={OFF|ON}]
系统变量 group_replication_single_primary_mode
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 布尔值 默认值 ON
注意此系统变量是一个组范围的配置设置,更改生效需要完全重新启动复制组。
group_replication_single_primary_mode
指示组自动选择一台服务器来处理读/写工作负载。此服务器为主服务器,所有其他服务器均为辅助服务器。此系统变量是一个组范围的配置设置。它在所有组成员上必须具有相同的值,并且在组复制运行时无法更改,并且需要完全重新启动组(由具有
group_replication_bootstrap_group=ON
的服务器引导)才能使值更改生效。有关在已执行和验证事务的情况下安全引导组的说明,请参见第 20.5.2 节,“重新启动组”。如果为该组设置了此系统变量的值,并且加入的成员为该系统变量设置了不同的值,则在将该值更改为匹配之前,该加入的成员将无法加入该组。如果为组成员设置了此系统变量的值,并且加入的成员不支持该系统变量,则它无法加入该组。
将此变量设置为
ON
会导致忽略group_replication_auto_increment_increment
的任何设置。使用
group_replication_switch_to_single_primary_mode()
和group_replication_switch_to_multi_primary_mode()
函数可以在组仍在运行时更改此系统变量的值。有关详细信息,请参见第 20.5.1.2 节,“更改组模式”。-
命令行格式 --group-replication-ssl-mode=值
系统变量 group_replication_ssl_mode
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 枚举 默认值 禁用
允许的值 禁用
REQUIRED
VERIFY_CA
VERIFY_IDENTITY
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_ssl_mode
设置组复制成员之间组通信连接的安全状态。可能的值如下:- 禁用
建立未加密的连接(默认)。
- REQUIRED
如果服务器支持安全连接,则建立安全连接。
- VERIFY_CA
与
REQUIRED
类似,但另外还会根据配置的证书颁发机构 (CA) 证书验证服务器 TLS 证书。- VERIFY_IDENTITY
与
VERIFY_CA
类似,但另外还会验证服务器证书是否与尝试连接的主机匹配。
有关为组通信配置 SSL 的信息,请参见 第 20.6.2 节 “使用安全套接字层 (SSL) 保护组通信连接”。
group_replication_start_on_boot
命令行格式 --group-replication-start-on-boot[={OFF|ON}]
系统变量 group_replication_start_on_boot
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 布尔值 默认值 ON
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_start_on_boot
指定服务器在服务器启动期间是否应自动启动组复制(ON
)或不启动(OFF
)。将此选项设置为ON
时,在对分布式恢复使用远程克隆操作后,组复制会自动重启。要在服务器启动期间自动启动组复制,必须使用
CHANGE REPLICATION SOURCE TO
语句将分布式恢复的用户凭据存储在服务器上的复制元数据存储库中。如果您更喜欢在START GROUP_REPLICATION
语句中指定用户凭据(仅将用户凭据存储在内存中),请确保将group_replication_start_on_boot
设置为OFF
。-
命令行格式 --group-replication-tls-source=值
系统变量 group_replication_tls_source
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 枚举 默认值 mysql_main
允许的值 mysql_main
mysql_admin
可以在组复制运行时更改此系统变量的值,但更改只有在停止并重新启动组成员上的组复制后才会生效。
group_replication_tls_source
指定组复制的 TLS 材料来源。 group_replication_transaction_size_limit
命令行格式 --group-replication-transaction-size-limit=#
系统变量 group_replication_transaction_size_limit
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 150000000
最小值 0
最大值 2147483647
单位 字节 此系统变量在所有组成员上应具有相同的值。可以在组复制运行时更改此系统变量的值。更改将立即对组成员生效,并从该成员上启动的下一个事务开始应用。在此过程中,允许系统变量的值在组成员之间有所不同,但某些事务可能会被拒绝。
group_replication_transaction_size_limit
配置复制组接受的最大事务大小(以字节为单位)。大于此大小的事务将由接收成员回滚,并且不会广播到组。大型事务可能会在内存分配方面给复制组带来问题,这可能会导致系统速度变慢,或者在网络带宽消耗方面,这可能会导致成员因忙于处理大型事务而被怀疑已失败。当此系统变量设置为 0 时,组接受的事务大小没有限制。此系统变量的默认设置为 150000000 字节(约 143 MB)。请根据您需要组容忍的最大消息大小调整此系统变量的值,请记住处理事务所需的时间与其大小成正比。
group_replication_transaction_size_limit
的值在所有组成员上应相同。有关大型事务的其他缓解策略,请参阅第 20.3.2 节“组复制限制”。group_replication_unreachable_majority_timeout
命令行格式 --group-replication-unreachable-majority-timeout=#
系统变量 group_replication_unreachable_majority_timeout
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 整数 默认值 0
最小值 0
最大值 31536000
单位 秒 此系统变量的值可以在组复制运行时更改,并且更改会立即生效。当发生需要此行为的问题时,将读取系统变量的当前值。
group_replication_unreachable_majority_timeout
指定在发生网络分区且无法连接到多数成员之前,遭受网络分区的成员等待的时间(以秒为单位)。在一个由 5 台服务器(S1、S2、S3、S4、S5)组成的组中,如果 (S1、S2) 和 (S3、S4、S5) 之间断开连接,则存在网络分区。第一个组 (S1、S2) 现在处于少数,因为它无法联系到超过一半的组成员。虽然多数组 (S3、S4、S5) 仍在运行,但少数组会等待指定的时间以进行网络重新连接。有关此方案的详细说明,请参阅第 20.7.8 节“处理网络分区和仲裁丢失”。默认情况下,
group_replication_unreachable_majority_timeout
设置为 0,这意味着由于网络分区而发现自己处于少数的成员将永远等待离开组。如果设置了超时,则在指定的时间过后,少数成员处理的所有待处理事务都将回滚,并且少数分区中的服务器将移动到ERROR
状态。如果成员的group_replication_autorejoin_tries
系统变量设置为指定自动重新加入尝试次数,则它将继续进行指定次数的尝试以超级只读模式重新加入组。如果成员未指定任何自动重新加入尝试,或者已用尽指定的尝试次数,则它将遵循系统变量group_replication_exit_state_action
指定的操作。警告当您有一个对称组时,例如只有两个成员 (S0、S2),如果存在网络分区并且没有多数,则在配置的超时后,所有成员都将进入
ERROR
状态。有关使用此选项的更多信息,请参阅第 20.7.7.2 节“无法访问的多数超时”。
group_replication_view_change_uuid
命令行格式 --group-replication-view-change-uuid=value
已弃用 是 系统变量 group_replication_view_change_uuid
作用域 全局 动态 是 SET_VAR
提示是否适用否 类型 字符串 默认值 AUTOMATIC
注意此系统变量是一个组范围的配置设置,更改生效需要完全重新启动复制组。
group_replication_view_change_uuid
指定一个备用 UUID,用作组生成的视图更改事件的 GTID 中标识符的 UUID 部分。备用 UUID 使得这些内部生成的事务易于与从客户端接收的事务区分开来。如果您的设置允许组之间的故障转移,并且您需要识别并丢弃特定于备份组的事务,这将非常有用。此系统变量的默认值为AUTOMATIC
,这意味着视图更改事件的 GTID 使用group_replication_group_name
系统变量指定的组名,就像来自客户端的事务一样。没有此系统变量的版本的组成员将被视为具有值AUTOMATIC
。备用 UUID 必须与
group_replication_group_name
系统变量指定的组名不同,并且必须与任何组成员的服务器 UUID 不同。它还必须与使用CHANGE REPLICATION SOURCE TO
语句的ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS
选项应用于此拓扑中任何位置的复制通道上的匿名事务的 GTID 中使用的任何 UUID 不同。此系统变量是一个组范围的配置设置。它在所有组成员上必须具有相同的值,并且在组复制运行时无法更改,并且需要完全重新启动组(由具有
group_replication_bootstrap_group=ON
的服务器引导)才能使值更改生效。有关在已执行和验证事务的情况下安全引导组的说明,请参见第 20.5.2 节,“重新启动组”。如果为该组设置了此系统变量的值,并且加入的成员为该系统变量设置了不同的值,则在将该值更改为匹配之前,该加入的成员将无法加入该组。如果为组成员设置了此系统变量的值,并且加入的成员不支持该系统变量,则它无法加入该组。
视图更改事件的日志记录将被恢复元数据的共享所取代;因此,此变量已弃用,并将在未来版本的 MySQL 中删除。