如果 InnoDB Cluster 是 InnoDB ClusterSet 部署的一部分,MySQL Shell 会在重启后立即自动将其恢复到其在拓扑中的角色,前提是它运行正常并且没有被标记为无效。但是,如果集群已被标记为无效或其 ClusterSet 复制通道已停止,则必须使用
操作将其重新加入 InnoDB ClusterSet 部署。
clusterSet
.rejoinCluster()
该
操作验证目标集群是否满足以下要求:
clusterSet
.rejoinCluster()
该集群以前是 ClusterSet 的成员。
集群有法定人数(足够多的成员在线以形成多数)。
集群的主服务器可访问。
集群不持有任何元数据锁或 InnoDB 事务锁。
gtid_executed
与 ClusterSet 的活动成员相比, 集群的 GTID 集 ( ) 不包含额外的事务,但视图更改事件除外。这些 Group Replication 内部事务由group_replication_view_change_uuid
系统变量指定的 UUID 标识,集群重新加入过程可以协调它们。
如果集群满足这些要求,该操作将重新启动 ClusterSet 复制通道并删除
INVALIDATED
状态。如果没有,您将需要修复已识别的任何问题并重试该命令。
按照此过程将 InnoDB Cluster 重新加入 InnoDB ClusterSet:
-
使用 MySQL Shell,使用 InnoDB Cluster 管理员帐户(使用创建
)连接到主集群或其中一个副本集群中的任何成员服务器。您还可以使用 InnoDB Cluster 服务器配置帐户,该帐户也具有所需的权限。建立连接后, 使用或 命令获取cluster
.setupAdminAccount()ClusterSet
对象 。使用 InnoDB Cluster 管理员帐户或服务器配置帐户很重要,这样存储在 对象中的默认用户帐户具有正确的权限。例如:dba.getClusterSet()
cluster
.getClusterSet()ClusterSet
mysql-js> \connect admin2@127.0.0.1:3310 Creating a session to 'admin2@127.0.0.1:3310' Please provide the password for 'admin2@127.0.0.1:3310': ******** Save password for 'admin2@127.0.0.1:3310'? [Y]es/[N]o/Ne[v]er (default No): Fetching schema names for autocompletion... Press ^C to stop. Closing old connection... Your MySQL connection id is 28 Server version: 8.0.27-commercial MySQL Enterprise Server - Commercial No default schema selected; type \use <schema> to set one. <ClassicSession:admin2@127.0.0.1:3310> mysql-js> myclusterset = dba.getClusterSet() <ClusterSet:testclusterset>
-
使用MySQL Shell 中 的 AdminAPI 函数检查整个部署的状态 。例如:clusterSet
.status()mysql-js> myclusterset.status({extended: 1})
有关输出的解释,请参阅 第 8.6 节,“InnoDB ClusterSet 状态和拓扑”。
-
发出
命令,命名要重新加入 InnoDB ClusterSet 的集群。例如:clusterSet
.rejoinCluster()mysql-js> myclusterset.rejoinCluster('clustertwo') Rejoining cluster 'clustertwo' to the clusterset NOTE: Cluster 'clustertwo' is invalidated * Updating metadata * Rejoining cluster ** Changing replication source of 127.0.0.1:4420 to 127.0.0.1:3310 ** Changing replication source of 127.0.0.1:4430 to 127.0.0.1:3310 ** Changing replication source of 127.0.0.1:4410 to 127.0.0.1:3310 Cluster 'clustertwo' was rejoined to the clusterset
对于
命令:clusterSet
.rejoinCluster()该
clusterName
参数是必需的,它指定用于 InnoDB ClusterSet 中的集群的标识符,如
命令输出中给出的那样。在示例中,clusterSet
.status()
是要重新加入的集群的名称。clustertwo
dryRun
如果您想执行验证并记录更改而不实际执行它们, 请使用该选项。
当您发出
命令时,MySQL Shell 会检查目标集群是否满足重新加入 ClusterSet 的要求,如果不满足则返回错误。如果目标集群满足要求,MySQL Shell执行以下任务:clusterSet
.rejoinCluster()检查 ClusterSet 复制通道是否正在从当前主集群复制,如果尚未复制,则重新配置它以执行此操作。
重新启动 ClusterSet 复制通道。
清除
INVALIDATED
集群的状态。
The target cluster rejoins the InnoDB ClusterSet as a replica cluster, even if it was previously a primary cluster. A controlled switchover is required if you want to make the target cluster into the primary cluster.
Note that if the target cluster has members that are not online or not reachable when you issue the
command, these members are not correctly configured by the command. If you no longer require these instances, you can remove them using theclusterSet
.rejoinCluster()
command. If you repair these instances or bring them online again, issue thecluster
.removeInstance()
command again after those members return to the cluster.clusterSet
.rejoinCluster() 使用该选项再次发出
命令clusterSet
.status()extended
,以验证 InnoDB ClusterSet 部署的状态。如果您确实想让重新加入的集群成为主集群,请发出
命令,命名重新加入的集群。 第 8.7 节,“InnoDB ClusterSet 控制切换”有该过程的说明,包括如何指示 MySQL Router 实例将流量发送到新的主集群。clusterSet
.setPrimaryCluster()