如果 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
集群的状态。
目标集群作为副本集群重新加入 InnoDB ClusterSet,即使它以前是主集群。如果要使目标集群成为主集群,则需要进行受控切换。
请注意,如果在您发出命令时目标集群有不在线或不可访问的
成员,则这些成员未被命令正确配置。如果您不再需要这些实例,可以使用clusterSet
.rejoinCluster()
命令将其删除。cluster
.removeInstance()
如果您修复这些实例或使它们再次联机,请在这些成员返回集群后 再次发出 命令。clusterSet
.rejoinCluster() 使用该选项再次发出
命令clusterSet
.status()extended
,以验证 InnoDB ClusterSet 部署的状态。如果您确实想让重新加入的集群成为主集群,请发出
命令,命名重新加入的集群。 第 8.7 节,“InnoDB ClusterSet 控制切换”有该过程的说明,包括如何指示 MySQL Router 实例将流量发送到新的主集群。clusterSet
.setPrimaryCluster()