准备好实例后,使用该
dba.createCluster()
函数创建集群,使用 MySQL Shell 连接到的实例作为集群的种子实例。种子实例被复制到您添加到集群的其他实例,使它们成为种子实例的副本。在此过程中,ic-1 实例用作种子。当您发出
MySQL Shell 时,会为连接到 MySQL Shell 当前全局会话的服务器实例创建一个经典的 MySQL 协议会话。例如,要创建一个名为的集群
并将返回的集群分配给一个名为的变量:
dba.createCluster(
name
)testCluster
cluster
mysql-js> var cluster = dba.createCluster('testCluster')
Validating instance at icadmin@ic-1:3306...
This instance reports its own address as ic-1
Instance configuration is suitable.
Creating InnoDB cluster 'testCluster' on 'icadmin@ic-1:3306'...
Adding Seed Instance...
Cluster successfully created. Use Cluster.addInstance() to add MySQL instances.
At least 3 instances are needed for the cluster to be able to withstand up to
one server failure.
这种将返回的集群分配给变量的模式使您能够使用 Cluster 对象的方法对集群执行进一步的操作。返回的 Cluster 对象使用一个新的会话,独立于 MySQL Shell 的全局会话。这确保如果您更改 MySQL Shell 全局会话,Cluster 对象将保持其与实例的会话。
为了能够管理集群,您必须确保您有一个合适的用户,该用户具有所需的权限。推荐的方法是创建一个管理用户。如果您在配置实例时没有创建管理用户,请使用该
操作。例如,要创建一个名为的用户
,该用户Cluster
.setupAdminAccount()icadmin
可以管理分配给变量的 InnoDB 集群
cluster
,请发出:
mysql-js> cluster.setupAdminAccount("icadmin")
有关 InnoDB Cluster 管理员帐户的更多信息, 请参阅手动配置 InnoDB Cluster管理员帐户。
该dba.createCluster()
操作支持 MySQL Shell 的interactive
选项。打开时
interactive
,在以下情况下会出现提示:
如果实例属于 Group Replication 组,并且
adoptFromGr: true
未设置为选项,系统会询问您是否要采用该复制组。如果
force: true
未设置为选项,系统会要求您确认创建多主集群。
当您运行dba.createCluster()
时,以及当您通过运行将另一个服务器实例添加到 InnoDB 集群时
,以下错误将记录到 MySQL 服务器实例的错误日志中。这些消息是无害的,并且与 AdminAPI 启动组复制的方式有关:
Cluster
.addInstance()
2020-02-10T10:53:43.727246Z 12 [ERROR] [MY-011685] [Repl] Plugin
group_replication reported: 'The group name option is mandatory'
2020-02-10T10:53:43.727292Z 12 [ERROR] [MY-011660] [Repl] Plugin
group_replication reported: 'Unable to start Group Replication on boot'
如果您遇到与元数据不可访问相关的错误,您可能配置了环回网络接口。为了正确使用 InnoDB Cluster,请禁用环回接口。
要检查集群是否已创建,请使用集群实例的status()
函数。请参阅
使用检查集群的状态
。
Cluster
.status()
一旦服务器实例属于一个集群,重要的是只使用 MySQL Shell 和 AdminAPI 来管理它们。不支持在将实例添加到集群后尝试手动更改实例上的组复制配置。同样,
server_uuid
不支持在使用 AdminAPI 配置实例后修改对 InnoDB Cluster 至关重要的服务器变量,例如 。
当您使用 MySQL Shell 8.0.14 及更高版本创建集群时,您可以设置在实例从集群中驱逐之前等待的时间量,例如当它们变得无法访问时。将expelTimeout
选项传递给操作,该操作
在种子实例上dba.createCluster()
配置
变量。group_replication_member_expel_timeout
该
expelTimeout
选项可以采用 0 到 3600 范围内的整数值。所有运行 MySQL 服务器 8.0.13 及更高版本的实例被添加到具有
expelTimeout
配置的集群中时,将自动配置为expelTimeout
与种子实例上配置的值相同。
有关可以传递给的其他选项的信息
dba.createCluster()
,请参阅
第 7.9 节,“修改或解散 InnoDB 集群”。
当您使用MySQL Shell 8.0.28及之后的版本创建集群时,如果您有安全需求,所有AdminAPI自动创建的账户都有严格的认证要求,您可以为
replicationAllowedHost
集群配置选项设置一个值。该
replicationAllowedHost
选项意味着所有自动创建的帐户只能从允许的主机连接,使用严格的基于子网的过滤。以前,
InnoDB Cluster 创建的内部用户帐户默认情况下可以从任何地方访问。
该replicationAllowedHost
选项可以采用字符串值。例如,要创建一个名为 的集群
testCluster
并将
replicationAllowedHost
选项设置为
192.0.2.0/24
,请发出:
mysql-js> dba.createCluster('testCluster', {replicationAllowedHost:'192.0.2.0/24'})
从 MySQL Shell 8.0.30 开始,InnoDB Cluster 支持在 MySQL 8.0.27 中为组复制引入的 MySQL 通信堆栈。
该选项communicationStack: XCOM|MYSQL
设置组复制系统变量的值
group_replication_communication_stack
。
例如:
mysql-js> dba.createCluster("testCluster", {communicationStack: "xcom"})
MYSQL
通信堆栈是为 MySQL 8.0.27 或更高版本创建的所有新集群的默认设置
。
有关详细信息,请参阅 第 7.5.9 节,“配置组复制通信堆栈”。