MySQL 8.0外壳/MySQL InnoDB集群/修改或溶解InnoDB集群

7.9修改或解散一个InnoDB集群

本节解释如何改变InnoDB集群从单一主multi-primary模式或者反过来,如何移除InnoDB集群中的服务器实例,以及如何化解一个InnoDB集群,您不再需要。

改变一个集群的拓扑

默认情况下,一个InnoDB集群运行在单一主模式中,有一个主服务器的集群,接受读写查询(R / W)和集群中的所有剩余的实例只接受读(R / O)查询。配置集群运行时在multi-primary模式中,集群中的所有实例的初选,这意味着他们接受读写查询(R / W)。如果一个集群的所有实例运行MySQL服务器8.0.15或更高版本,您可以更改在线集群,集群的拓扑。在以前的版本中有必要完全溶解并重新创建集群的配置更改。这个使用组行动协调人暴露通过描述的功能配置一个在线集团,因此你应该遵守的规则配置在线群体。

请注意

Multi-primary模式被认为是一种先进的模式。

通常是一个单一主集群选举新主当当前主离开了集群意外,例如由于意外停止。选举过程通常是用于选择当前的中学成为新的主。覆盖的选举过程,迫使特定服务器成为新的主,使用集群.setPrimaryInstance (实例)函数,实例指定连接的实例应该成为新的主。这使您能够配置底层组复制组选择一个特定的实例作为新主,绕过了选举过程。

你可以改变模式(有时称为拓扑)集群运行在单一主和multi-primary之间使用以下操作:

  • 集群.switchToMultiPrimaryMode (),交换机集群multi-primary模式。所有实例成为初选。

  • 集群.switchToSinglePrimaryMode ([实例])集群转换到单一主模式。如果实例指定,它成为主要的和所有其他实例成为次要的。如果实例没有指定,主要是体重最高的实例成员(和最低的UUID,以防领带的重量)。

删除实例从InnoDB集群

您可以删除从一个实例集群应该任何时候你想这么做。这可以完成了集群.removeInstance (实例)方法,如以下示例:

mysql-js > cluster.removeInstance (root@localhost: 3310)集群InnoDB的实例将被删除。根据实例的种子,元数据会话可能成为无效。如果是这样,请启动一个新的会话R / W实例元数据存储。试图离开组复制组…实例“localhost: 3310”是成功地从集群中删除。

你可以通过的互动选项控制是否提示确认删除实例从集群。在交互模式下,系统提示您继续与实例的删除(或没有),以防它是不可到达的。的集群.removeInstance ()删除操作确保了实例的元数据的所有集群成员在线,实例本身。最后实例仍在在线状态在一个集群InnoDB使用这个操作不能被删除。

当实例被删除交易仍需要应用,AdminAPI等待的秒数配置MySQL的壳dba.gtidWaitTimeout选择交易(GTIDs)应用。MySQL壳dba.gtidWaitTimeout选项默认值为60秒,看到的13.4节,“配置MySQL Shell选项”改变默认的信息。如果定义的超时值dba.gtidWaitTimeout达到当等待事务和应用选择是(或未定义),那么发出一个错误和删除操作中止。如果定义的超时值dba.gtidWaitTimeout达到当等待事务和应用选项设置为真正的然后继续操作没有错误和删除实例从集群。

重要的

选择只应使用集群.removeInstance (实例)当你想要忽略任何错误,例如未处理的事务或实例遥不可及的,并且不打算重用的实例集群。从集群移除一个实例时忽略错误可能导致一个实例与集群同步,防止重新加入集群在稍后的时间。只使用选择当你打算不再使用实例集群,在所有其他情况下,您应该总是试图恢复实例,只有删除它是可用的和健康的,换句话说,地位在线

溶解一个InnoDB集群

解散一个集群InnoDB你连接到一个读写实例,例如主在一个单一主集群,并使用集群.dissolve ()命令。删除所有与集群相关的元数据和配置,并禁用组复制实例。之间的任何数据复制实例并没有被移除。

重要的

没有办法撤销集群的溶解。重新创建它dba.createCluster ()

集群.dissolve ()这是操作只能配置实例在线或可获得的。如果一个集群成员不能达成的成员了集群.dissolve ()命令你必须决定怎样进行溶解操作。如果有任何机会你想加入的任何实例标识为失踪的集群,强烈建议取消溶解操作,首先把失踪实例重新上线,溶解之前操作。这将确保所有实例可以有自己的元数据更新正确,并且没有split - brain局面的机会。然而,如果从集群实例无法达到有永久的离开了集群可能别无选择,只能强制解散操作,这意味着失踪的实例将被忽略,只有在线实例操作的影响。

警告

强制解散操作忽略集群实例可以导致实例不能达到溶解操作期间继续操作,创建split - brain的风险情况。只能强迫解散操作忽略缺失的情况下如果你确定没有实例的机会上网了。

在交互模式中,如果一个集群成员不可以溶解操作期间显示交互式提示符,例如:

mysql-js >集群.dissolve()集群仍有以下注册实例:{“clusterName”:“testCluster”、“defaultReplicaSet”:{“名称”:“默认”,“拓扑”:[{“地址”:“ic-1:3306”、“标签”:“ic-1:3306”、“角色”:“哈”},{“地址”:“ic-2:3306”、“标签”:“ic-2:3306”、“角色”:“哈”},{“地址”:“ic-3:3306”、“标签”:“ic-3:3306”、“角色”:“哈”}]}}警告:你即将解散整个集群并失去它提供的高可用性特性。此操作不可恢复。所有成员将被删除从集群和复制将被停止,内部恢复用户帐户和集群元数据会被删除。用户数据在所有实例将保持不变。你确定你想解散集群?[y / N]: y错误:实例“ic-2:3306”不能被删除,因为它是“(失踪)”状态。请把实例再次在线集群并试图解散。如果实例是永远不可到达的,那么你可以选择来进行操作,只有从集群元数据中删除实例。无论如何你要继续(只有实例元数据将被删除)?[y / N]: y集群实例的ic-3:3306试图离开…… Instance 'ic-1:3306' is attempting to leave the cluster... WARNING: The cluster was successfully dissolved, but the following instance was skipped: 'ic-2:3306'. Please make sure this instance is permanently unavailable or take any necessary manual action to ensure the cluster is fully dissolved.

在这个例子中,集群由三个实例,其中一个是离线时溶解。错误了,你给出的选择如何进行。在这种情况下,失踪ic-2实例被忽略和可访问的成员有自己的元数据更新。

以交互模式运行MySQL Shell时,例如当运行一个批处理文件,您可以配置的行为集群.dissolve ()操作使用选择。强制解散操作忽略任何实例都做不到,问题:

mysql-js >集群.dissolve({力:真})

任何实例,可以达到从集群,以及任何不可到达的实例将被忽略。本节中的警告的强迫失踪实例的删除一个集群同样适用于这种技术强迫解散操作。

您还可以使用互动选择与集群.dissolve ()操作覆盖MySQL Shell运行的模式,例如使交互式提示符出现在运行一个批处理脚本。例如:

mysql-js >集群.dissolve({互动:真})

dba.gtidWaitTimeoutMySQL Shell选项配置多长时间集群.dissolve ()操作等待集群交易之前删除应用实例从集群目标,但只有当目标实例在线。发出一个错误如果达到超时等待集群交易时应用的实例被删除,除非力量:真正的使用,跳过错误在这种情况下。

请注意

发行后cluster.dissolve (),任何变量分配到集群对象是不再有效。