文档主页
适用于 VS Code 的 MySQL Shell


适用于 VS Code 的 MySQL Shell  /  ...  /  Cluster 类方法

预发布版本:2024-07-17

A.2 Cluster 类方法

以下部分详细介绍了 InnoDB 集群方法可用的选项。

添加 InnoDB 集群实例

将实例添加到 InnoDB 集群。

  • JavaScript:addInstance(instance[, options])

  • Python:add_instance(instance[, options])

选项如下

  • label:要添加的实例的标识符。

  • recoveryMethod:首选的状态恢复方法。可以是 autocloneincremental。默认值为 auto

  • waitRecovery:整数值,指示命令是否应等待恢复过程完成及其详细程度。

  • password:实例连接密码。

  • memberSslMode:实例上使用的 SSL 模式。

  • ipWhitelist:允许连接到实例进行组复制的主机列表。已弃用。

  • ipAllowlist:允许连接到实例进行组复制的主机列表。

  • localAddress:字符串值,包含要使用的组复制本地地址,而不是自动生成的地址。

  • groupSeeds:字符串值,包含以逗号分隔的组复制对等地址列表,用于替换自动生成的地址。已弃用并忽略。

  • interactive:布尔值,用于在命令执行中禁用或启用向导,这意味着将根据设置的值提供或不提供提示和确认。默认值等于 MySQL Shell 向导模式。

  • exitStateAction:字符串值,指示组复制退出状态操作。

  • memberWeight:整数值,表示故障转移时自动主节点选举的百分比权重。

  • autoRejoinTries:整数值,用于定义实例在被驱逐后尝试重新加入集群的次数。

示例:将实例添加到由分配的变量 mycluster 表示的集群。

mycluster.addInstance('root@localhost:3333')

有关更多信息,请参阅向 InnoDB 集群添加实例

检查 InnoDB 集群实例

验证与集群相关的实例全局事务标识符 (GTID) 状态。

  • JavaScript:checkInstanceState(instance)

  • Python:check_instance_state(instance)

示例:分析侦听端口 3334 的实例,显示已执行的 GTID 以及集群上已执行和已清除的 GTID,以确定该实例对集群是否有效。

mycluster.checkInstanceState('root@localhost:3334')

有关更多信息,请参阅向 InnoDB 集群添加实例

创建 InnoDB ClusterSet

从现有的独立 InnoDB 集群创建 InnoDB ClusterSet。

  • JavaScript:createClusterSet(dominate[, options])

  • Python:create_cluster_set(dominate[, options])

选项如下

  • dryRun:布尔值,如果为 true,则执行创建 InnoDB ClusterSet 的所有验证和步骤,但不进行任何更改。完成后将抛出异常。

  • clusterSetReplicationSslMode:InnoDB ClusterSet 复制通道的 SSL 模式。

  • replicationAllowedHost:字符串值,用作内部复制帐户的主机名部分(即 mysql_innodb_cs_###'@'hostname)。默认值为 %。InnoDB ClusterSet 的任何成员都必须能够使用具有此主机名值的帐户连接到任何其他成员。

示例:使用分配给集群的变量 mycluster 创建名为 cs1 的 ClusterSet。

mycluster.createClusterSet('cs1')

有关更多信息,请参阅部署 InnoDB ClusterSet

描述 InnoDB 集群

  • JavaScript:describe()

  • Python:describe()

示例:使用分配的变量 mycluster 描述集群,包括其所有信息、副本集和实例。

mycluster.describe()

断开 InnoDB 集群连接

断开集群对象使用的所有内部会话。

  • JavaScript:disconnect()

  • Python:disconnect()

示例:使用分配的变量 mycluster 断开集群与所有内部会话的连接。

mycluster.disconnect()

解散 InnoDB 集群

解散集群。

  • JavaScript:dissolve([options])

  • Python:dissolve([options])

选项如下

  • force:布尔值,如果为 true,则必须执行解散操作,即使无法访问集群的某些成员,或者在等待成员赶上复制更改时超时。默认情况下,设置为 false

  • interactive:布尔值,用于在命令执行中禁用或启用向导,这意味着将根据设置的值提供或不提供提示和确认。默认值等于 MySQL Shell 向导模式。

示例:使用分配的变量 mycluster 停止组复制并从集群元数据中取消注册所有成员。

mycluster.dissolve()

隔离 InnoDB 集群

隔离 InnoDB 集群的所有流量。

  • JavaScript:fenceAllTraffic()

  • Python:fence_all_traffic()

示例:使用分配的变量 mycluster 隔离集群的所有流量。

mycluster.fenceAllTraffic()

有关更多信息,请参阅在 InnoDB ClusterSet 中隔离集群

隔离 InnoDB 集群的写入流量

隔离集群的写入流量。

  • JavaScript:fenceWrites()

  • Python:fence_writes()

示例:使用分配的变量 mycluster 隔离集群的所有写入流量。

mycluster.fenceWrites()

有关更多信息,请参阅在 InnoDB ClusterSet 中隔离集群

从仲裁丢失中恢复 InnoDB 集群

从仲裁丢失中恢复集群。如果组被分区或发生比可容忍的崩溃更多,则可能会出现这种情况。

forceQuorumUsingPartitionOf() 方法从仲裁丢失场景中将集群恢复到运行状态。如果组被分区或发生比可容忍的崩溃更多,则可能会出现这种情况。使用此方法时,从给定实例定义的角度来看,所有在线成员都将添加到组中。

  • JavaScript:forceQuorumUsingPartitionOf(instance[, password])

  • Python:force_quorum_using_partition_of(instance[, password])

示例:使用分配的变量 mycluster 从仲裁丢失中恢复集群。实例定义是实例的连接数据。

mycluster.forceQuorumUsingPartitionOf('root@localhost:3341', 'password')

有关更多信息,请参阅恢复和重启 InnoDB 集群

获取 InnoDB ClusterSet

返回表示 InnoDB ClusterSet 的对象。

  • JavaScript: getClusterSet()

  • Python: get_cluster_set()

示例:使用已分配的 mycluster 变量,将 InnoDB ClusterSet 分配给名为 myclusterset 的变量。

var myclusterset = mycluster.getClusterSet()

获取 InnoDB ClusterSet 名称

检索 InnoDB Cluster 的名称。

  • JavaScript: getName()

  • Python: get_name()

示例:使用已分配的变量 mycluster 返回集群的域名。

mycluster.getName()

集群帮助

提供有关 Cluster 类及其成员的帮助。

  • JavaScript: help([member])

  • Python: help([member])

要使用 mycluster 分配的变量查看 fenceWrites 方法的帮助详细信息,请键入

mycluster.help("fenceWrites")

列出 MySQL Router

列出路由器实例。

  • JavaScript: listRouters([options])

  • Python: list_routers([options])

选项如下

  • onlyUpgradeRequired:布尔值,启用筛选,以便仅包含支持旧版本元数据架构且需要升级的路由器实例。

示例:使用已分配的变量 mycluster 返回列出与集群关联的路由器实例的 JSON 对象。

mycluster.listRouters()

列出选项

列出 InnoDB Cluster 的集群配置选项。

  • JavaScript: options([options])

  • Python: options([options])

示例:返回描述集群配置选项的 JSON 对象。

mycluster.options()

重新加入 InnoDB Cluster

将实例重新加入集群。

  • JavaScript: rejoinInstance(instance[, options])

  • Python: rejoin_instance(instance[, options])

选项如下

  • password:实例连接密码。

  • memberSslMode:实例上使用的 SSL 模式。

  • interactive:布尔值,用于在命令执行中禁用或启用向导,这意味着将根据设置的值提供或不提供提示和确认。默认值等于 MySQL Shell 向导模式。

  • ipWhitelist:允许连接到实例进行组复制的主机列表。已弃用。

  • ipAllowlist:允许连接到实例进行组复制的主机列表。

示例:使用已分配的变量 mycluster 从集群重新加入实例,包括密码选项。

mycluster.rejoinInstance('root@localhost:3342',{password:
'password'})

有关更多信息,请参见 将实例重新加入集群

从 InnoDB Cluster 中移除实例

从 InnoDB Cluster 中移除实例。

  • JavaScript: removeInstance(instance[, options])

  • Python: remove_instance(instance[, options])

选项如下

  • password:实例连接密码。

  • force:布尔值,指示如果无法访问实例,是否必须移除该实例(即使仅从元数据中移除)。默认情况下,设置为 false

  • interactive:布尔值,用于在命令执行中禁用或启用向导,这意味着将根据设置的值提供或不提供提示和确认。默认值等于 MySQL Shell 向导模式。

示例:从集群中移除实例。在此示例中,密码作为选项包含在内。

mycluster.removeInstance('root@localhost:3342',{password:
'Password1'})

有关更多信息,请参见 从 InnoDB Cluster 中移除实例

移除 MySQL Router 实例的元数据

移除路由器实例的元数据。

  • JavaScript: removeRouterMetadata(routerDef)

  • Python: remove_router_metadata(routerDef)

示例:使用已分配的变量 mycluster 从集群的元数据中移除已注册的 MySQL Router 实例 myRouter1

mycluster.removeRouterMetadata('myRouter1')

重新扫描 InnoDB Cluster

重新扫描 InnoDB Cluster。

  • JavaScript: rescan([options])

  • Python: rescan([options])

选项如下

  • addInstances:包含要添加到元数据的新活动实例的连接数据的列表,或者 auto 自动将缺少的实例添加到元数据。

  • interactive:布尔值,用于在命令执行中禁用或启用向导,这意味着将根据设置的值提供或不提供提示和确认。默认值等于 MySQL Shell 向导模式。

  • removeInstances:包含要从元数据中移除的过时实例的连接数据的列表,或者 auto 自动从元数据中移除过时的实例。

  • updateTopologyMode:布尔值,用于指示是否应更新 (true) 或不更新 (false) 元数据中的拓扑模式(单主或多主)以匹配集群正在使用的模式。默认情况下,不会更新元数据 (false)。已弃用。

  • upgradeCommProtocol:布尔值。设置为 true 可将组复制通信协议升级到尽可能高的版本。

示例:重新扫描集群以查找新的和过时的组复制实例,以及使用的拓扑模式(例如,单主和多主)中的更改。

mycluster.rescan()

重置 InnoDB Cluster 恢复帐户的密码

重置 InnoDB Cluster 恢复帐户的密码。

  • JavaScript: resetRecoveryAccountsPassword(options)

  • Python: reset_recovery_accounts_password(options)

选项如下

  • force:布尔值,指示如果在尝试重置任何实例上的密码时发生错误(例如,如果任何实例未联机),操作是否将继续。默认情况下,设置为 false

  • interactive:布尔值,用于在命令执行中禁用或启用向导,这意味着将根据设置的值提供或不提供提示和确认。默认值等于 MySQL Shell 向导模式。

示例:重置集群使用的所有内部恢复用户帐户的密码。

在此示例中,使用了布尔值 interactive 模式。

mycluster.resetRecoveryAccountsPassword({interactive:true})

有关更多信息,请参见 InnoDB Cluster 的用户帐户

更改 InnoDB Cluster 成员中的选项值

更改 InnoDB Cluster 成员中选项的值。

  • JavaScript: setInstanceOption(instance, option, value)

  • Python: set_instance_option(instance, option, value)

选项如下

  • tag:<option>:要与集群关联的内置和用户定义的标签。

  • exitStateAction:字符串值,指示组复制退出状态操作。

  • memberWeight:整数值,表示故障转移时自动主节点选举的百分比权重。

  • autoRejoinTries:整数值,用于定义实例在被驱逐后尝试重新加入集群的次数。

  • label:实例的字符串标识符。

示例:更改 memberWeight

mycluster.setInstanceOption("root@localhost:3341","memberWeight", 95)

有关更多信息,请参见 标记元数据

更改 InnoDB Cluster 中的选项值

更改整个 InnoDB Cluster 的选项值。

  • JavaScript: setOption(option, value)

  • Python: set_option(option, value)

选项如下

  • tag:<option>:要与集群关联的内置和用户定义的标签。

  • exitStateAction:字符串值,指示组复制退出状态操作。

  • memberWeight:整数值,表示故障转移时自动主节点选举的百分比权重。

  • AutoRejoinTries:整数值,用于定义实例在被驱逐后尝试重新加入集群的次数。

  • Label:实例的字符串标识符。

示例:使用已分配的变量 mycluster 将集群的名称标签更改为 my_new_cluster

mycluster.setOption("clusterName", "my_new_cluster_name")

有关更多信息,请参见 标记元数据

选举 InnoDB Cluster 的新主节点

选举特定的 InnoDB Cluster 成员作为新的主节点。

  • JavaScript: setPrimaryInstance(instance)

  • Python: set_primary_instance(instance)

示例:使用 mycluster 的已分配变量,将新主节点设置为侦听端口 3335 上的实例。

mycluster.setPrimaryInstance('root@localhost:3335')

有关更多信息,请参见 更改 InnoDB Cluster 的拓扑

创建或升级 InnoDB Cluster 管理员帐户

创建或升级 InnoDB Cluster 管理员帐户。

  • JavaScript: setupAdminAccount(user, options)

  • Python: setup_admin_account(user, options)

选项如下

  • password:InnoDB Cluster 管理员帐户的密码。

  • dryRun:布尔值,用于启用帐户设置过程的空运行。默认值为 false

  • interactive:布尔值,用于在命令执行中禁用或启用向导,这意味着将根据设置的值提供或不提供提示和确认。默认值等于 MySQL Shell 向导模式。

  • update:必须启用的布尔值,以允许更新现有帐户的特权和/或密码。默认值为 false

示例:使用 mycluster 的已分配变量,创建或升级具有管理 InnoDB Cluster 所需特权的 MySQL 用户帐户。例如,设置密码为 Password1demo-user

mycluster.setupAdminAccount("demo_user", {password:"Password1"})

有关更多信息,请参见 为 AdminAPI 创建用户帐户

创建或升级要与 MySQL Router 一起使用的 MySQL 帐户

创建或升级要与 MySQL Router 一起使用的 MySQL 帐户。

  • JavaScript: setupRouterAccount(user, options)

  • Python: setup_router_account(user, options)

选项如下

  • password:MySQL Router 帐户的密码。

  • dryRun:布尔值,用于启用帐户设置过程的空运行。默认值为 false

  • interactive:布尔值,用于在命令执行中禁用或启用向导,这意味着将根据设置的值提供或不提供提示和确认。默认值等于 MySQL Shell 向导模式。

示例:必需参数 user 是要创建或升级的 MySQL 帐户的名称,供 MySQL Router 使用。

mycluster.setupRouterAccount('test@localhost:3306')

有关更多信息,请参见 配置 MySQL Router 用户

InnoDB Cluster 的状态

描述 InnoDB Cluster 的状态。

  • JavaScript: status([options])

  • Python: status([options])

extended 选项值包括

  • 0:禁用命令详细输出(默认)。

  • 1:包括有关元数据版本、组协议版本、组名称、集群成员 UUID、组复制报告的集群成员角色和状态以及受保护的系统变量列表的信息。

  • 2:包括有关连接和应用程序处理的事务的信息。

  • 3:包括有关每个集群成员的复制机制的更详细统计信息。

  • Boolean:等效于分配 0 (false) 或 1 (true)。

示例:使用已分配的变量 mycluster 返回描述集群状态的 JSON 对象。

mycluster.status()

将 InnoDB Cluster 切换到多主模式

将以单主模式运行的 InnoDB Cluster 更改为多主模式。

  • JavaScript: switchToMultiPrimaryMode()

  • Python: switch_to_multi_primary_mode()

示例:将以单主模式运行的集群更改为多主模式。例如,使用已分配的变量 mycluster

mycluster.switchToMultiPrimaryMode()

有关更多信息,请参见 更改 InnoDB Cluster 的拓扑

将 InnoDB Cluster 切换到单主模式

将 InnoDB Cluster 切换到单主模式。

  • JavaScript: switchToSinglePrimaryMode([instance])

  • Python: switch_to_single_primary_mode([instance])

示例:使用 mycluster 分配的变量,更改要成为新主节点的端口上侦听的实例的主机名和端口号。

mycluster.switchToSinglePrimaryMode('root@localhost:3341')

如果未提供实例定义,则新主节点将是成员权重最高(如果成员权重相同,则为 UUID 最低)的实例。

有关更多信息,请参见 更改 InnoDB Cluster 的拓扑

解除 InnoDB Cluster 防护

解除 InnoDB Cluster 的防护并恢复写入流量。

  • JavaScript: unfenceWrites()

  • Python: unfence_writes()

示例:使用 mycluster 分配的变量恢复之前已从写入流量中防护的集群上的写入流量。

mycluster.unfenceWrites()

有关更多信息,请参阅在 InnoDB ClusterSet 中隔离集群