全面上市前:2022-11-17

A.2 簇类方法

以下部分提供了可用于 InnoDB Cluster 方法的选项的详细信息。

添加 InnoDB 集群实例

将实例添加到 InnoDB Cluster。

  • 脚本:addInstance(instance[, options])

  • Python:add_instance(instance[, options])

选项如下:

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

  • recoveryMethod: 状态恢复的首选方法。可能是autoclone或者incremental。默认值为auto

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

  • password: 实例连接密码。

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

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

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

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

  • groupSeeds: 字符串值,包含要使用的组复制对等地址的逗号分隔列表,而不是自动生成的地址。弃用和忽略。

  • interactive: 布尔值,用于在命令执行时禁用或启用向导,表示根据设置的值是否提供提示和确认。默认值等于 MySQL Shell 向导模式。

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

  • memberWeight:整数值,带有故障转移时自动主要选举的百分比权重。

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

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

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

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

检查 InnoDB 集群实例

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

  • 脚本:checkInstanceState(instance)

  • Python:check_instance_state(instance)

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

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

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

创建 InnoDB ClusterSet

从现有的独立 InnoDB Cluster 创建 InnoDB ClusterSet。

  • 脚本:createClusterSet(dominate[, options])

  • Python:create_cluster_set(dominate[, options])

选项如下:

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

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

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

示例:创建一个 分配给集群 cs1的变量mycluster

mycluster.createClusterSet('cs1')

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

描述 InnoDB 集群

  • 脚本:describe()

  • Python:describe()

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

mycluster.describe()

断开 InnoDB 集群

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

  • 脚本:disconnect()

  • Python:disconnect()

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

mycluster.disconnect()

解散 InnoDB 集群

解散集群。

  • 脚本:dissolve([options])

  • Python:dissolve([options])

选项如下:

  • force: 布尔值,用于确认必须执行溶解操作,即使无法到达集群的某些成员,或者在等待成员赶上复制更改时达到超时。默认情况下,设置为false

  • interactive: 布尔值,用于禁用或启用命令执行中的向导,表示根据设置的值是否提供提示和确认。默认值等于 MySQL Shell 向导模式。

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

mycluster.dissolve()

围栏 InnoDB 集群

从所有流量中隔离 InnoDB Cluster。

  • 脚本:fenceAllTraffic()

  • Python:fence_all_traffic()

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

mycluster.fenceAllTraffic()

有关更多信息,请参阅 InnoDB ClusterSet 中的防护集群

从写入流量中隔离 InnoDB 集群

从写入流量中隔离集群。

  • 脚本:fenceWrites()

  • Python:fence_writes()

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

mycluster.fenceWrites()

有关更多信息,请参阅 InnoDB ClusterSet 中的防护集群

从 Quorum 丢失中恢复 InnoDB Cluster

从仲裁丢失中恢复群集。如果一个组被分区或发生超过可容忍的崩溃,就会发生这种情况。

forceQuorumUsingPartitionOf()方法将集群从失去法定人数的情况下恢复到操作状态。如果一个组被分区或发生超过可容忍的崩溃,就会发生这种情况。使用此方法时,从给定实例定义的角度来看,所有在线成员都将添加到组中。

  • 脚本:forceQuorumUsingPartitionOf(instance[, password])

  • Python:force_quorum_using_partition_of(instance[, password])

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

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

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

获取 InnoDB ClusterSet

返回表示 InnoDB ClusterSet 的对象。

  • 脚本:getClusterSet()

  • Python:get_cluster_set()

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

var myclusterset = mycluster.getClusterSet()

获取 InnoDB ClusterSet 名称

检索 InnoDB Cluster 的名称。

  • 脚本:getName()

  • Python:get_name()

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

mycluster.getName()

集群帮助

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

  • 脚本:help([member])

  • Python:help([member])

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

mycluster.help("fenceWrites")

列出 MySQL 路由器

列出路由器实例。

  • 脚本:listRouters([options])

  • Python:list_routers([options])

选项如下:

  • onlyUpgradeRequired:布尔值,启用过滤,因此仅包含支持旧版本元数据模式并需要升级的路由器实例。

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

mycluster.listRouters()

列表选项

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

  • 脚本:options([options])

  • Python:options([options])

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

mycluster.options()

重新加入 InnoDB 集群

将实例重新加入集群。

  • 脚本: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 中删除一个实例。

  • 脚本:removeInstance(instance[, options])

  • Python:remove_instance(instance[, options])

选项如下:

  • password:实例连接密码。

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

  • interactive: 布尔值,用于禁用或启用命令执行中的向导,表示根据设置的值是否提供提示和确认。默认值等于 MySQL Shell 向导模式。

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

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

有关更多信息,请参阅 从 InnoDB 集群中删除实例

删除 MySQL 路由器实例的元数据

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

  • 脚本:removeRouterMetadata(routerDef)

  • Python:remove_router_metadata(routerDef)

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

mycluster.removeRouterMetadata('myRouter1')

重新扫描 InnoDB 集群

重新扫描 InnoDB Cluster。

  • 脚本:rescan([options])

  • Python:rescan([options])

选项如下:

  • addInstances:列出要添加到元数据的新活动实例的连接数据,或 auto自动将缺失的实例添加到元数据。

  • interactive: 布尔值,用于禁用或启用命令执行中的向导,表示根据设置的值是否提供提示和确认。默认值等于 MySQL Shell 向导模式。

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

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

  • upgradeCommProtocol: 布尔值。设置为 true 以将 Group Replication 通信协议升级到可能的最高版本。

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

mycluster.rescan()

InnoDB集群恢复账号重置密码

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

  • 脚本: resetRecoveryAccountsPassword(options)

  • Python: reset_recovery_accounts_password(options)

选项如下:

  • force: 布尔值,表示如果在任何实例上尝试重置密码时发生错误(例如,如果其中任何实例不在线),操作是否会继续。默认情况下,设置为 false

  • interactive: 布尔值,用于禁用或启用命令执行中的向导,表示根据设置的值是否提供提示和确认。默认值等于 MySQL Shell 向导模式。

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

在这个例子中,使用了布尔interactive模式。

mycluster.resetRecoveryAccountsPassword({interactive:true})

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

更改 InnoDB 集群成员中的选项值

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

  • 脚本: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 集群中的选项值

更改整个 InnoDB Cluster 的选项值。

  • 脚本:setOption(option, value)

  • Python:set_option(option, value)

选项如下:

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

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

  • memberWeight:整数值,带有故障转移时自动主要选举的百分比权重。

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

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

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

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

有关详细信息,请参阅 标记元数据

为 InnoDB Cluster 选择新的主节点

选择一个特定的 InnoDB Cluster 成员作为新的主要成员。

  • 脚本:setPrimaryInstance(instance)

  • Python:set_primary_instance(instance)

示例:使用分配的变量将新主实例设置为侦听端口 3335 的实例mycluster

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

有关更多信息,请参阅 更改 InnoDB 集群的拓扑

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

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

  • 脚本:setupAdminAccount(user, options)

  • Python:setup_admin_account(user, options)

选项如下:

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

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

  • interactive: 布尔值,用于禁用或启用命令执行中的向导,表示根据设置的值是否提供提示和确认。默认值等于 MySQL Shell 向导模式。

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

示例:使用分配的变量创建或升级具有管理 InnoDB 集群所需权限的 MySQL 用户帐户 mycluster。例如,设置 demo-user密码为 Password1.

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

有关详细信息,请参阅 为 AdminAPI 创建用户帐户

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

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

  • 脚本: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 路由器用户

InnoDB集群状态

描述 InnoDB Cluster 的状态。

  • 脚本:status([options])

  • Python:status([options])

extended选项值为 :

  • 0:禁用命令详细信息(默认)。

  • 1:包括有关元数据版本、组协议版本、组名称、集群成员 UUID、集群成员角色和状态的信息,这些信息由 Group Replication 和受防护系统变量列表报告。

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

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

  • Boolean: 相当于分配 0( false) 或 1( true)。

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

mycluster.status()

将 InnoDB Cluster 切换到多主模式

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

  • 脚本:switchToMultiPrimaryMode()

  • Python:switch_to_multi_primary_mode()

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

mycluster.switchToMultiPrimaryMode()

有关更多信息,请参阅 更改 InnoDB 集群的拓扑

将 InnoDB Cluster 切换到单主模式

将 InnoDB Cluster 切换到单主模式。

  • 脚本: switchToSinglePrimaryMode([instance])

  • Python: switch_to_single_primary_mode([instance])

示例mycluster:使用分配的变量 更改侦听端口的实例的主机名和端口号,该端口将成为新的主实例

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

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

有关更多信息,请参阅 更改 InnoDB 集群的拓扑

Unfence InnoDB 集群

Unfences InnoDB Cluster 并恢复写入流量。

  • 脚本:unfenceWrites()

  • Python:unfence_writes()

示例mycluster:恢复集群上的写入流量,该集群先前使用分配 的变量隔离了写入流量

mycluster.unfenceWrites()

有关更多信息,请参阅 InnoDB ClusterSet 中的防护集群