WL#14539: GR:指定记录View_change_log_event的UUID
执行概要
这个工作日志应该为dba /操作员提供一个选项来配置组复制在记录View_change_log_event时使用的UUID。
用户故事
作为MySQL DBA,我想:
- 区分分配给事务的GTID和分配给自动组操作的GTID,更准确地说,组复制成员加入时记录View_change_log_event,组GTID在二进制日志上。
范围
本文件中描述的工作是:
实现组复制变量
group_replication_view_change_uuid
在二进制日志的View_change_log_event上使用uuid实现对变量的验证
group_replication_view_change_uuid
,必须与分配给匿名事务[1]的服务器uuid、组复制名称和uuid不同。
高水平的描述
当一个成员在“组复制”中加入一个组时,它会记录一个View_change_log_event事件,并带有组复制组名uuid。
我们将引入一个选项,在对二进制日志记录View_change_log_event时使用不同的uuid。
[1] ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS https://dev.10bet靠谱mysql.com/doc/refman/8.0/en/change-master-to.html
功能需求
FR1:当组复制启动时,如果
group_replication_view_change_uuid
等于服务器uuid,group_replication_group_name
或者在任何复制区域通道的ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTION[1]上使用的UUID,它将中止启动GR的进程,但允许服务器启动。FR2:当执行START GROUP_REPLICATION if
group_replication_view_change_uuid
等于服务器uuid,group_replication_group_name
或者匿名gtid使用的UUID,它将中止启动进程。FR3:一个组的所有成员必须有相同的
group_replication_view_change_uuid
价值。尝试加入具有不同值的组将导致不允许新成员加入。FR4:改变
group_replication_view_change_uuid
插件应该停止FR5:
group_replication_view_change_uuid
默认没有uuid,组复制将使用组名将View_change_log_event写入二进制日志FR6:当
group_replication_view_change_uuid
值与"AUTOMATIC"不同,View_change_log_event将使用该uuid记录。FR7:的值
group_replication_view_change_uuid
必须为"AUTOMATIC"或有效的uuid。FR8:成员哪个版本不知道
group_replication_view_change_uuid
,将被视为group_replication_view_change_uuid
= "自动"FR9:声明
将复制源更改为assign_gtids_to_anonymous_transaction
如果指定的UUID等于group_replication_view_change_uuid,则失败。
非功能性需求
[1] ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS https://dev.10bet靠谱mysql.com/doc/refman/8.0/en/change-master-to.html
方法总结
- 一个组可以设置一个uuid,该uuid将用于二进制日志上的组复制View_change_log_event
安全上下文
的使用group_replication_view_change_uuid
不会对安全性进行任何修改。
升级/降级和跨版本复制
所有组成员必须有相同的group_replication_view_change_uuid
价值。对于低于8.0.25的服务器版本,如果该选项不存在,则认为其值为“AUTOMATIC”。
它将不可能更新group_replication_view_change_uuid
当小组在线的时候。停止群组,在所有成员上设置选项并启动群组。
用户界面
在这个工作日志中,我们将引入一个选项来指定一个uuid,当记录View_change_log_event时,Group Replication将使用这个uuid。
- 名称:group_replication_view_change_uuid
- 值:{自动,字符串包含有效的UUID}
- 默认值:自动
- 范围:全球
- DYNAMIC:必须在组停止时设置
- REPLICATED(写入二进制日志):no
- 坚持:坚持,PERSIST_ONLY
- 权限要求:SYSTEM_VARIABLES_ADMIN
- 说明:AUTOMATIC是组名uuid和字符串,包含在记录View_change_log_event时使用的有效uuid
API
的变量group_replication_view_change_uuid
成员将被添加到成员信息结构。
可观察性
启动组复制时group_replication_view_change_uuid
应当记录。
当更新group_replication_view_change_uuid
变量,对于每种类型的失败,我们都有不同的消息。
对于一个无效的UUID它使用现有的错误ER_WRONG_VALUE_FOR_VAR:“变量% -。64s' can't be set to the value of '%-.200s'"
使用以下参数:
group_replication_view_change_uuid
- 设置group_replication_view_change_uuid
为相同的UUID有组名它使用现有的错误% - ER_WRONG_VALUE_FOR_VAR_PLUS_ACTIONABLE_PART:变量。“64s”不能设置为“%-.200s”的值。% -.200s
使用以下参数:
group_replication_view_change_uuid
- 设置group_replication_view_change_uuid
- 与“group_replication_name”相同。请将group_replication_view_change_uuid修改为AUTOMATIC
为配置了匿名GTIDS的通道正在使用的UUID
- group_replication_group_view_change_uuid
- 设置group_replication_view_change_uuid
- 是否已经用于服务器通道中的ASSIGN_GTIDS_TO_ANOYMOUS_TRANSACTIONS
当组复制启动时将生效group_replication_view_change_uuid
变量,如果配置无效,它将中止并记录以下错误之一:
- "The group_replication_view_change_uuid is not a valid UUID"输出说明
- ER_GRP_RPL_VIEW_CHANGE_UUID_SAME_AS_GROUP_NAME:“group_replication_view_change_uuid是'%s',与group_replication_name相同。Please change group_replication_view_change_uuid to AUTOMATIC"
- ER_GRP_RPL_VIEW_CHANGE_UUID_IS_SAME_AS_ANONYMOUS_TO_GTID_UUID: " group_replication_group_name '%s'与服务器通道中ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS的UUID值相同"
如果服务器UUID与上配置的相同group_replication_group_view_change_uuid
当尝试加入带有消息的组时,它将中止:
- ER_GRP_RPL_SERVER_UUID_IS_INCOMPATIBLE_WITH_GRP_VIEW_CHANGE_UUID: "成员server_uuid与组不兼容。Server_uuid %s匹配group_replication_group_view_change_uuid %s。"
如果一个成员加入组,但在兼容性检查中有不同的值group_replication_group_view_change_uuid
* ER_GRP_RPL_VIEW_CHANGE_UUID_DIFF_FROM_GRP:成员配置了一个view_change_uuid选项值'%s',不同于组'%s'。该成员现在将退出组。
部署和安装
对于一个能够使用此功能的组,所有成员必须具有相同的值group_replication_view_change_uuid
创建这个组织的成员。
协议
在成员加入时,它与组的成员进行状态交换,并将执行与组配置的兼容性测试。
一个工匠会有group_replication_view_change_uuid
配置与剩余成员相比,它需要与允许加入的所有成员相等。
在一个有旧版本而没有旧版本的小组里group_replication_view_change_uuid
会员应使用自动
被允许加入
故障模型规范
由于兼容性是在成员加入调用中检查的,所以它不遵循group_replication_exit_state_action,所以加入通过返回一个错误START GROUP_REPLICATION离开组。
总结的变化
服务器将发送group_replication_view_change_uuid
在成员信息结构上,以允许加入服务器确认正在使用相同的值。
那个信息会被传送出去的Plugin_gcs_message
:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 类Group_member_info:公共Plugin_gcs_message{/ *……* /
//有效载荷项的长度:variable PIT_VIEW_CHANGE_UUID = 21, //该项之后不能出现有效类型代码。PIT_MAX = 22
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
当一个服务器加入时,它将确认有相同的group_replication_view_change_uuid
比小组里的所有成员都要多。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //伪代码
For (member: members_in_the_group) {if (joiner.change_view_uuid() != member.change_view_uuid()) {abort_join();}}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
会员信息group_replication_view_change_uuid
配置为自动
默认情况下,如果一个成员没有定义它,joiner知道它有默认配置。
在certification.cc
它将添加一个带有视图更改uuid的变量,该变量将在记录View_change_pipeline_action时使用。
当执行一个将复制源更改为assign_gtids_to_anonymous_transaction
它将验证指定的UUID是不同的group_replication_view_change_uuid
.