MySQL8 中文参考(八十二)(4)https://developer.aliyun.com/article/1565904
20.9 组复制变量
原文:
dev.mysql.com/doc/refman/8.0/en/group-replication-options.html
20.9.1 组复制系统变量
20.9.2 组复制状态变量
接下来的两个部分包含了关于 MySQL 服务器系统和服务器状态变量的信息,这些变量是特定于组复制插件的。
表 20.4 组复制变量和选项摘要
名称 | 命令行 | 选项文件 | 系统变量 | 状态变量 | 变量范围 | 动态 |
group_replication_advertise_recovery_endpoints | 是 | 是 | 是 | 全局 | 是 | |
group_replication_allow_local_lower_version_join | 是 | 是 | 是 | 全局 | 是 | |
group_replication_auto_increment_increment | 是 | 是 | 是 | 全局 | 是 | |
group_replication_autorejoin_tries | 是 | 是 | 是 | 全局 | 是 | |
group_replication_bootstrap_group | 是 | 是 | 是 | 全局 | 是 | |
group_replication_clone_threshold | 是 | 是 | 是 | 全局 | 是 | |
group_replication_communication_debug_options | 是 | 是 | 是 | 全局 | 是 | |
group_replication_communication_max_message_size | 是 | 是 | 是 | 全局 | 是 | |
group_replication_communication_stack | 是 | 全局 | 否 | |||
group_replication_components_stop_timeout | 是 | 是 | 是 | 全局 | 是 | |
group_replication_compression_threshold | 是 | 是 | 是 | 全局 | 是 | |
group_replication_consistency | 是 | 是 | 是 | 两者 | 是 | |
group_replication_enforce_update_everywhere_checks | 是 | 是 | 是 | 全局 | 是 | |
group_replication_exit_state_action | 是 | 是 | 是 | 全局 | 是 | |
group_replication_flow_control_applier_threshold | 是 | 是 | 是 | 全局 | 是 | |
group_replication_flow_control_certifier_threshold | 是 | 是 | 是 | 全局 | 是 | |
group_replication_flow_control_hold_percent | 是 | 是 | 是 | 全局 | 是 | |
group_replication_flow_control_max_quota | 是 | 是 | 是 | 全局 | 是 | |
group_replication_flow_control_member_quota_percent | 是 | 是 | 是 | 全局 | 是 | |
group_replication_flow_control_min_quota | 是 | 是 | 是 | 全局 | 是 | |
group_replication_flow_control_min_recovery_quota | 是 | 是 | 是 | 全局 | 是 | |
group_replication_flow_control_mode | 是 | 是 | 是 | 全局 | 是 | |
group_replication_flow_control_period | 是 | 是 | 是 | 全局 | 是 | |
group_replication_flow_control_release_percent | 是 | 是 | 是 | 全局 | 是 | |
group_replication_force_members | 是 | 是 | 是 | 全局 | 是 | |
group_replication_group_name | 是 | 是 | 是 | 全局 | 是 | |
group_replication_group_seeds | 是 | 是 | 是 | 全局 | 是 | |
group_replication_gtid_assignment_block_size | 是 | 是 | 是 | 全局 | 是 | |
group_replication_ip_allowlist | 是 | 是 | 是 | 全局 | 是 | |
group_replication_ip_whitelist | 是 | 是 | 是 | 全局 | 是 | |
group_replication_local_address | 是 | 是 | 是 | 全局 | 是 | |
group_replication_member_expel_timeout | 是 | 是 | 是 | 全局 | 是 | |
group_replication_member_weight | 是 | 是 | 是 | 全局 | 是 | |
group_replication_message_cache_size | 是 | 是 | 是 | 全局 | 是 | |
group_replication_paxos_single_leader | 是 | 是 | 是 | 全局 | 是 | |
group_replication_poll_spin_loops | 是 | 是 | 是 | 全局 | 是 | |
group_replication_primary_member | 是 | 全局 | 否 | |||
group_replication_recovery_complete_at | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_get_public_key | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_public_key_path | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_reconnect_interval | 是 | 是 | 是 | ��局 | 是 | |
group_replication_recovery_retry_count | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_ssl_ca | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_ssl_capath | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_ssl_cert | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_ssl_cipher | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_ssl_crl | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_ssl_crlpath | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_ssl_key | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_ssl_verify_server_cert | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_tls_ciphersuites | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_tls_version | 是 | 是 | 是 | 全局 | 是 | |
group_replication_recovery_use_ssl | 是 | 是 | 是 | 全局 | 是 | |
group_replication_single_primary_mode | 是 | 是 | 是 | 全局 | 是 | |
group_replication_ssl_mode | 是 | 是 | 是 | 全局 | 是 | |
group_replication_start_on_boot | 是 | 是 | 是 | 全局 | 是 | |
group_replication_transaction_size_limit | 是 | 是 | 是 | 全局 | 是 | |
group_replication_unreachable_majority_timeout | 是 | 是 | 是 | 全局 | 是 | |
group_replication_view_change_uuid | 是 | 是 | 是 | 全局 | 是 | |
名称 | 命令行 | 选项文件 | 系统变量 | 状态变量 | 变量范围 | 动态 |
20.9.1 Group Replication 系统变量
原文:
dev.mysql.com/doc/refman/8.0/en/group-replication-system-variables.html
本节列出了特定于 Group Replication 插件的系统变量。
每个 Group Replication 系统变量的名称都以group_replication_
为前缀。
注意
InnoDB Cluster 使用 Group Replication,但 Group Replication 系统变量的默认值可能与本节中记录的默认值不同。例如,在 InnoDB Cluster 中,group_replication_communication_stack
的默认值是MYSQL
,而不是默认 Group Replication 实现的XCOM
。
更多信息,请参阅 MySQL InnoDB Cluster。
一些 Group Replication 组成员的系统变量,包括一些 Group Replication 特定的系统变量和一些通用的系统变量,都是组范围的配置设置。这些系统变量在所有组成员上必须具有相同的值,并且需要对组进行完全重启(由具有group_replication_bootstrap_group=ON
的服务器引导)才能使值更改生效。有关在所有成员已停止的组中重新启动的说明,请参阅 Section 20.5.2, “Restarting a Group”。
如果运行中的组对于组范围的配置设置有一个值设置,而加入的成员对于该系统变量有不同的值设置,则加入的成员在值匹配之前无法加入该组。如果组对于这些系统变量中的一个设置了一个值,而加入的成员不支持该系统变量,则无法加入该组。
以下系统变量是组范围的配置设置:
group_replication_single_primary_mode
group_replication_enforce_update_everywhere_checks
group_replication_gtid_assignment_block_size
group_replication_view_change_uuid
group_replication_paxos_single_leader
group_replication_communication_stack
(这是一个特殊情况,不受 Group Replication 自身检查的限制;有关详细信息,请参阅系统变量描述)default_table_encryption
lower_case_table_names
transaction_write_set_extraction
(从 MySQL 8.0.26 开始已弃用)
在 Group Replication 运行时无法通过通常的方法更改组范围的配置设置。然而,从 MySQL 8.0.16 开始,您可以使用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
的值。更多信息,请参阅 Section 20.5.1.2, “Changing the Group Mode”。
大多数 Group Replication 的系统变量在不同的组成员上可以有不同的值。对于以下系统变量,建议在组的所有成员上设置相同的值,以避免事务不必要的回滚、消息传递失败或消息恢复失败:
group_replication_auto_increment_increment
group_replication_communication_max_message_size
group_replication_compression_threshold
group_replication_message_cache_size
group_replication_transaction_size_limit
大多数 Group Replication 的系统变量被描述为动态的,它们的值可以在服务器运行时更改。然而,在大多数情况下,更改只有在您使用STOP GROUP_REPLICATION
语句停止并重新启动组复制后才会生效,随后是一个START GROUP_REPLICATION
语句。以下系统变量的更改在不停止和重新启动 Group Replication 的情况下生效:
group_replication_advertise_recovery_endpoints
group_replication_autorejoin_tries
group_replication_consistency
group_replication_exit_state_action
group_replication_flow_control_applier_threshold
group_replication_flow_control_certifier_threshold
group_replication_flow_control_hold_percent
group_replication_flow_control_max_quota
group_replication_flow_control_member_quota_percent
group_replication_flow_control_min_quota
group_replication_flow_control_min_recovery_quota
group_replication_flow_control_mode
group_replication_flow_control_period
group_replication_flow_control_release_percent
group_replication_force_members
group_replication_ip_allowlist
group_replication_ip_whitelist
group_replication_member_expel_timeout
group_replication_member_weight
group_replication_transaction_size_limit
group_replication_unreachable_majority_timeout
当您更改任何 Group Replication 系统变量的值时,请记住,如果在每个成员同时通过 STOP GROUP_REPLICATION
语句或系统关闭停止 Group Replication 的某一点,那么必须像第一次启动一样通过引导重新启动组。有关安全执行此操作的说明,请参见 Section 20.5.2, “重新启动组”。对于整个组的配置设置,这是必需的,但如果您正在更改其他设置,请尽量确保至少有一个成员始终在运行。
重要
- 如果将一些 Group Replication 的系统变量作为命令行参数传递给服务器,则在服务器启动期间,一些 Group Replication 的系统变量在启动时并未完全验证。这些系统变量包括
group_replication_group_name
、group_replication_single_primary_mode
、group_replication_force_members
、SSL 变量和流量控制系统变量。它们只在服务器启动后完全验证。 - 指定组成员的 IP 地址或主机名的 Group Replication 系统变量在发出
START GROUP_REPLICATION
语句之前不会被验证。直到那时,Group Replication 的组通信系统 (GCS) 才可用于验证这些值。
专用于 Group Replication 插件的系统变量如下:
group_replication_advertise_recovery_endpoints
命令行格式 | --group-replication-advertise-recovery-endpoints=value |
引入版本 | 8.0.21 |
系统变量 | group_replication_advertise_recovery_endpoints |
作用范围 | 全局 |
动态 | 是 |
SET_VAR 提示适用 |
否 |
类型 | 字符串 |
默认值 | DEFAULT |
- 此系统变量的值可以在 Group Replication 运行时更改。更改立即在成员上生效。但是,已经接收到系统变量先前值的加入成员将继续使用该值。只有在值更改后加入的成员才会接收新值。
group_replication_advertise_recovery_endpoints
指定加入成员如何为分布式恢复的状态传输与现有成员建立连接。该连接用于远程克隆操作和从捐赠者的二进制日志进行状态传输。值为DEFAULT
,即默认设置,表示加入成员使用现有成员的标准 SQL 客户端连接,如 MySQL Server 的hostname
和port
系统变量所指定。如果report_port
系统变量指定了替代端口号,则使用该端口号。性能模式表replication_group_members
在MEMBER_HOST
和MEMBER_PORT
字段中显示此连接的地址和端口号。这是截至 MySQL 8.0.20 版本的组成员的行为。您可以指定一个或多个分布式恢复端点,而不是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 地址和端口作为分布式恢复端点,以及加入成员如何使用它们的详细信息,请参见 Section 20.5.4.1.1,“选择分布式恢复端点的地址”。要求的摘要如下:
- IP 地址不必为 MySQL Server 配置,但必须分配给服务器。
- 端口必须使用
port
、report_port
或admin_port
系统变量为 MySQL Server 配置。 - 如果使用
admin_port
,则需要为分布式恢复的复制用户授予适当的权限。 - IP 地址不需要添加到由
group_replication_ip_allowlist
或group_replication_ip_whitelist
系统变量指定的组复制允许列表中。 - 连接的 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 |
- 此系统变量的值可以在运行 Group Replication 时更改,但更改仅在您停止并重新启动组成员上的 Group Replication 后生效。
group_replication_allow_local_lower_version_join
允许当前服务器即使运行低于组的 MySQL 服务器版本也加入组。默认设置为OFF
,如果运行低于现有组成员的版本,则不允许服务器加入复制组。此标准策略确保组的所有成员能够交换消息并应用事务。请注意,运行 MySQL 8.0.17 或更高版本的成员在检查兼容性时考虑发布的补丁版本。运行 MySQL 8.0.16 或更低版本,或 MySQL 5.7 的成员只考虑主要版本。仅在以下情况下将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 运行时,您不能更改此系统变量的值。您必须停止 Group Replication,更改系统变量的值,然后在每个组成员上重新启动 Group Replication。在此过程中,系统变量的值允许在组成员之间有所不同,但是一些组成员上的事务可能会被回滚。
group_replication_auto_increment_increment
确定在此服务器实例上执行的事务的自增列的连续值之间的间隔。增加一个间隔可以避免在组成员上写入时选择重复的自增值,这会导致事务回滚。默认值 7 代表可用值的数量和复制组的允许最大大小(9 个成员)之间的平衡。如果您的组成员更多或更少,您可以在启动 Group Replication 之前将此系统变量设置为匹配预期的组成员数量。
重要
当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 时,才会进行这些更改和还原。如果它们的值已经从默认值修改过,则组复制不会更改它们。在 MySQL 8.0 中,当组复制处于单主模式时,系统变量也不会被修改,只有一个服务器进行写入。 group_replication_autorejoin_tries
命令行格式 | --group-replication-autorejoin-tries=# |
引入版本 | 8.0.16 |
系统变量 | group_replication_autorejoin_tries |
作用范围 | 全局 |
动态 | 是 |
SET_VAR 提示适用 |
否 |
类型 | 整数 |
默认值(≥ 8.0.21) | 3 |
默认值(≤ 8.0.20) | 0 |
最小值 | 0 |
最大值 | 2016 |
- 可以在组复制运行时更改此系统变量的值,并且更改会立即生效。当发生需要该行为的问题时,会读取系统变量的当前值。
group_replication_autorejoin_tries
指定成员在被驱逐或在达到group_replication_unreachable_majority_timeout
设置之前无法联系到大多数组时,尝试自动重新加入组的次数。当成员被驱逐或无法联系到大多数组时,它会尝试重新加入(使用当前插件选项值),然后继续进行进一步的自动重新加入尝试,直到达到指定的尝试次数。在一次不成功的自动重新加入尝试后,成员会在下一次尝试之前等待 5 分钟。如果在没有成员重新加入或停止的情况下耗尽了指定的尝试次数,则成员将执行由group_replication_exit_state_action
系统变量指定的操作。
在 MySQL 8.0.20 版本之前,默认设置为 0,表示成员不会尝试自动重新加入。从 MySQL 8.0.21 开始,默认设置为 3,表示成员会自动尝试重新加入群组,每次间隔 5 分钟,最多可以指定 2016 次尝试。
在自动重新加入尝试期间和之间,成员保持在超级只读模式,并且不接受写入,但仍然可以在成员上进行读取,随着时间的推移,过时读取的可能性会增加。如果无法容忍任何时间段内可能出现的过时读取,请将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=# |
引入版本 | 8.0.17 |
系统变量 | group_replication_clone_threshold |
范围 | 全局 |
动态 | 是 |
SET_VAR 提示适用 |
否 |
类型 | 整数 |
默认值 | 9223372036854775807 |
最小值 | 1 |
最大值 | 9223372036854775807 |
单位 | 事务 |
- 在 Group Replication 运行时可以更改此系统变量的值,但更改只有在停止并重新启动组成员的 Group Replication 后才会生效。
group_replication_clone_threshold
指定现有成员(捐赠者)和加入成员(接收者)之间的事务间隔,触发在分布式恢复过程中使用远程克隆操作将状态传输给加入成员。如果加入成员和合适的捐赠者之间的事务间隔超过阈值,则 Group Replication 将开始使用远程克隆操作进行分布式恢复。如果事务间隔低于阈值,或者远程克隆操作在技术上不可行,则 Group Replication 直接从捐赠者的二进制日志进行状态传输。
警告
在活动组中不要使用低设置的group_replication_clone_threshold
。如果在远程克隆操作正在进行时组中发生超过阈值的事务数量,加入成员在重新启动后会再次触发远程克隆操作,并可能无限继续。为避免这种情况,请确保将阈值设置为预期在远程克隆操作所需时间内组中可能发生的事务数量更高的数字。
要使用此功能,捐赠者和加入成员必须事先设置为支持克隆。有关说明,请参见 Section 20.5.4.2, “分布式恢复的克隆”。当执行远程克隆操作时,Group Replication 会为您管理它,包括所需的服务器重新启动,前提是设置了group_replication_start_on_boot=ON
。如果没有设置,则必须手动重新启动服务器。远程克隆操作会替换加入成员上的现有数据字典,但如果加入成员有其他组成员上不存在的额外事务,则 Group Replication 会进行检查并不继续进行,因为这些事务将被克隆操作擦除。
默认设置(即 GTID 中事务的最大允许序列号)意味着几乎总是尝试从捐赠者的二进制日志进行状态传输,而不是克隆。但是,请注意,无论您的阈值如何,Group Replication 始终尝试执行克隆操作,如果从捐赠者的二进制日志中无法进行状态传输,例如因为加入成员所需的事务在任何现有组成员的二进制日志中都不可用。如果您不希望在复制组中完全使用克隆,请不要在成员上安装克隆插件。 group_replication_communication_debug_options
命令行格式 | --group-replication-communication-debug-options=value |
系统变量 | 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 |
MySQL8 中文参考(八十二)(6)https://developer.aliyun.com/article/1565906