要用于组复制的服务器实例必须满足以下要求。
innodb存储引擎。数据必须存储在
Innodb.
事务存储引擎。事务是乐观执行的,然后在提交时间内检查冲突。如果存在冲突,以便在整个组中保持一致性,则会回滚一些事务。这意味着需要事务存储引擎。而且,Innodb.
提供了一些附加功能,以便在与Group Replication一起操作时更好地管理和处理冲突。使用其他存储引擎,包括临时的记忆
存储引擎可能会导致组复制中的错误。您可以通过设置来防止使用其他存储引擎disabled_storage_eengines.
组成员上的系统变量,例如:disabled_storage_eengines =“myisam,blackhole,联合,存档,记忆”
主要键。由组要复制的每个表必须具有定义的主键,或者主键等效,其中等效是非空唯一键。这种键是表中每一行的唯一标识符,使系统通过识别每个事务已经修改的完全行程来确定哪些事件冲突。组复制有自己内置的一组主键或主键等价物,并且不使用所执行的检查
sql_require_primary_key.
系统变量。你可以设置sql_require_primary_key = On.
对于运行组复制的服务器实例,您可以设置Require_table_primary_key_check.
选项将复制源更改为
|改变大师
陈述上
对于组复制频道。但是,请注意,您可能会发现在组件中执行的检查下不允许在组复制的内置检查下允许的一些事务sql_require_primary_key = On.
或者Require_table_primary_key_check = On.
。网络性能。MySQL组复制旨在部署在群集环境中,服务器实例彼此非常接近。组的性能和稳定性可能受到网络延迟和网络带宽的影响。必须在所有组成员之间的所有时间保持双向通信。如果对服务器实例阻止入站或出站通信(例如,由防火墙或通过连接问题),则该成员无法在组中运行,并且组成员(包括带有问题的成员)可能无法使用报告受影响服务器实例的正确成员状态。
来自MySQL 8.0.14,您可以使用IPv4或IPv6网络基础架构,或两个混合,用于远程组复制服务器之间的TCP通信。还没有任何阻止在虚拟专用网络(VPN)上运行的组复制。
此外,来自MySQL 8.0.14,其中组复制服务器实例共同定位并共享本地组通信引擎(XCOM)实例,其中具有较低开销的专用输入通道用于可在可能而不是TCP套接字的情况下进行通信。对于需要远程XCOM实例之间进行通信的某些组复制任务,例如加入组,仍然使用TCP网络,因此网络性能会影响组的性能。
必须配置以下选项,如组成员的服务器实例所示。
唯一的服务器标识符。使用
server_id.
系统变量以通过复制拓扑中的所有服务器的所有服务器配置具有唯一服务器ID的服务器。服务器ID必须是1到(2之间的正整数32.)-1,它必须与复制拓扑中的任何其他服务器使用的其他服务器ID不同。二进制日志活动。放
--log-bin [= log_file_name]
。从MySQL 8.0中,默认情况下启用二进制日志记录,除非要更改二进制日志文件的名称,否则无需指定此选项。组复制复制二进制日志的内容,因此二进制日志需要开启它以进行操作。看第5.4.4节“二进制日志”。记录副本更新。放
log_slave_updates = ON.
。从MySQL 8.0中,此设置是默认值,因此您无需指定它。集团成员需要在加入时间和应用程序通过Replication Planter上应用从捐赠者收到的事务,并记录他们接收并从组中应用的所有事务。这使得可以通过从现有组成员的二进制日志传输进行分布式恢复来进行组复制。二进制日志行格式。放
binlog_format =行
。此设置是默认值,因此您无需指定它。组复制依赖于基于行的复制格式,以在组中的服务器中始终如一地传播更改,并提取必要的信息以检测在组中同时执行的事务之间的冲突。来自MySQL 8.0.19,Require_Row_Format.
设置设置为组复制的通道,以在应用事务时强制执行基于行的复制。看第17.2.1节“复制格式”和第17.3.3节“复制特权检查”。关闭二进制日志校验和(到MySQL 8.0.20)。最多包括MySQL 8.0.20,集
binlog_checksum = none
。在这些版本中,组复制无法使用校验和,并且不支持它们在二进制日志中的存在。来自MySQL 8.0.21,组复制支持校验和,因此组成员可以使用默认设置binlog_checksum = crc32.
,您无需指定它。全局事务标识符。放
gtid_mode = ON.
和Enforce_gtid_consisty = On.
。这些设置不是默认值。组复制需要基于GTID的复制,它使用全局事务标识符跟踪组在组中的每个服务器实例上提交的事务。看第17.1.3节“与全局事务标识符复制”。复制信息存储库。放
master_info_repository =表
和Relay_log_info_repository =表
。在MySQL 8.0中,这些设置是默认值,而且文件
设置已弃用。从MySQL 8.0.23中,不推荐使用这些系统变量,因此省略系统变量,只需允许默认值。复制应用程序需要将复制元数据写入mysql.slave_master_info.
和mysql.slave_relay_log_info.
系统表以确保组复制插件具有一致的可恢复性和复制元数据的交易管理。看第17.2.4.2节“复制元数据存储库”。事务写入设置提取。放
transaction_write_set_extraction = xxhash64.
因此,在收集行将行记录到二进制日志时,服务器也收集写入集。在MySQL 8.0中,此设置是默认值,并且从MySQL 8.0.26中弃用了系统变量的使用。写入集基于每行的主要键,是唯一标识已更改的行的标记的简化且紧凑的视图。组复制使用此信息进行所有组成员的冲突检测和认证。默认表加密。放
default_table_encryption.
对所有小组成员的价值相同。默认架构和表空间加密可以启用(上
)或禁用(离开
,默认)只要设置在所有成员上都是一样的。小写表名称。放
dreame_case_table_names.
对所有小组成员的价值相同。用于使用1的设置是正确的Innodb.
存储引擎,组复制所需的存储引擎。请注意,此设置不是所有平台上的默认值。二进制日志依赖关系跟踪。环境
binlog_transaction_dependency_tracking = writeSet_session.
可以提高组成员的性能,具体取决于组的工作量。在从中继日志应用交易时,组复制在认证后,独立于所设置的值binlog_transaction_dependency_tracking.
。但是,价值binlog_transaction_dependency_tracking.
会如何影响事务如何写入组复制成员上的二进制日志。这些日志中的依赖性信息用于帮助从捐赠者的二进制日志进行状态转移,以进行分布式恢复,每当成员加入或重新纳入该组时发生。多线程适用者。组复制成员可以配置为多线程副本,使得能够并行应用事务。非零价值
slave_parallel_workers.
可以指定成员上的多线程应用,最多可指定1024个并行应用程序线程。如果您这样做,还需要以下设置:-
slave_preeserve_commit_order = 1
-
需要此设置以确保并行事务的最终提交与原始事务相同。组复制依赖于围绕保证所有参与会员收到并以相同的顺序进行承诺交易的保证构建的一致性机制。
-
slave_parallel_type = logical_clock.
-
此设置是必需的
slave_preeserve_commit_order = 1
。它指定策略用于确定允许在副本上并行执行哪个事务的策略。
环境
slave_parallel_workers = 0.
禁用并行执行,并为副本提供单个应用程序线程,没有协调器线程。随着这个设置,slave_parallel_type.
和slave_preerve_commit_order.
选项无效并忽略。-