MySQL Shell 9.3
The member servers in an InnoDB Cluster make use of three types of user accounts. One InnoDB Cluster server configuration account is used to configure the server instances for the cluster. One or more InnoDB Cluster administrator accounts can be created for administrators to manage the server instances after the cluster has been set up. One or more MySQL Router accounts can be created for MySQL Router instances to connect to the cluster. Each of the user accounts must exist on all of the member servers in the InnoDB Cluster, with the same user name and the same password.
In an InnoDB ClusterSet deployment, every member server is part of an InnoDB Cluster, so they require the same types of user accounts. The user accounts from the primary cluster are used for all of the clusters in the deployment. Each of the user accounts must exist on every member server in every cluster in the deployment - both the primary cluster and the replica clusters.
This account is used to create and configure the member
servers of an InnoDB Cluster and InnoDB ClusterSet
deployment. Each member server has only one server
configuration account. The same user account name and
password must be used on every member server in the cluster.
You can use the root
account on the
servers for this purpose, but if you do this, the
root
account on every member server in
the cluster must have the same password. This is not
recommended for security reasons.
The preferred approach is to create the InnoDB Cluster
server configuration account using a
dba.configureInstance()
command with the
clusterAdmin
option. For better security,
specify the password at the interactive prompt, otherwise
specify it using the clusterAdminPassword
option. Create the same account, with the same user name and
password, in the same way on every server instance that will
be part of the InnoDB Cluster - both the instance to which
you connect to create the cluster, and the instances that
will join the cluster after that.
The dba.configureInstance()
command
grants the account the required permissions automatically.
You may set up the account manually if you prefer, granting
it the permissions listed in
Configuring InnoDB Cluster Administrator Accounts Manually. The account
needs full read and write privileges on the InnoDB Cluster
metadata tables, in addition to full MySQL administrator
privileges.
The InnoDB Cluster server configuration account that you
create using the dba.configureInstance()
operation is not replicated to other
servers in the InnoDB Cluster or in the
InnoDB ClusterSet deployment. MySQL Shell disables binary
logging for the dba.configureInstance()
operation. This means that you must create the account on
every server instance individually.
In an InnoDB ClusterSet deployment, the same
InnoDB Cluster server configuration account must exist on
every server instance that is used in the deployment. When
you set up a replica cluster, you therefore need to issue a
dba.configureInstance()
command with the
clusterAdmin
option to create the account
on every server instance that is going to be part of the
replica cluster. The command must name the InnoDB Cluster
server configuration account from the primary cluster, and
you must specify the same password for it. You need to do
this step before joining the instances into the replica
cluster, so the account is available to configure the
replica InnoDB Cluster and the InnoDB ClusterSet
deployment metadata and replication.
These accounts can be used to administer InnoDB Cluster and InnoDB ClusterSet after you have completed the configuration process. You can set up more than one of them. Each account must exist on every member server in an InnoDB Cluster with the same user name and password, and on every member server of every cluster in an InnoDB ClusterSet deployment.
To create an InnoDB Cluster administrator account for an
InnoDB ClusterSet deployment, you issue a
command on one member server in the primary cluster, after
you have added all the instances to that cluster. This
command creates an account with the user name and password
that you specify, with all the required permissions. A
transaction to create an account with
cluster
.setupAdminAccount()
is sent to all the other server instances in the cluster to
create the account on them.
cluster
.setupAdminAccount()
If the primary InnoDB Cluster already existed when you
began to set up the InnoDB ClusterSet deployment, an
InnoDB Cluster administrator account likely already
exists. In that case, you do not need to issue
again, unless you want to create further InnoDB Cluster
administrator accounts.
cluster
.setupAdminAccount()
The replica clusters in an InnoDB ClusterSet deployment
must have the same set of InnoDB Cluster administrator
accounts as the primary cluster. However, when you create
the replica clusters, do not attempt to set up the
InnoDB Cluster administrator accounts yourself. The
transactions to create accounts with
are written to the binary log for the primary cluster, and
they are automatically replicated from the primary cluster
to the replica clusters during the provisioning process.
When a replica cluster applies these transactions it creates
the same accounts on the member servers in the replica
cluster. If the accounts already exist on a server in the
replica cluster, this causes a replication error, and the
server cannot join the cluster. So you need to wait for them
to be replicated.
cluster
.setupAdminAccount()
If a transaction to create an InnoDB Cluster administrator account happened a while back on the primary cluster, it might take some time for the transaction to be replicated and for the account to appear on a replica cluster. Selecting cloning as the provisioning method for the replica cluster speeds up the process.
If the primary InnoDB Cluster was set up in a version
before MySQL Shell 8.0.20, the
command might have been used with the
cluster
.setupAdminAccount()update
option to update the privileges of
the InnoDB Cluster server configuration account. This is
a special use of the command that is not written to the
binary log, and is not replicated to the replica clusters.
When the InnoDB ClusterSet deployment is complete, you may
use
to create further InnoDB Cluster administrator accounts
for the ClusterSet. You can do this while connected to any
member server in the InnoDB ClusterSet deployment, either
in the primary cluster or in a replica cluster. The
transaction to create the account is routed to the primary
cluster to be executed, then replicated to all the servers
in the replica clusters, where it creates the account on all
of them.
cluster
.setupAdminAccount()
These accounts are used by MySQL Router to connect to server instances in an InnoDB Cluster and in an InnoDB ClusterSet deployment. You can set up more than one of them. Each account must exist on every member server in an InnoDB Cluster with the same user name and password, or SSL certificate, and on every member server of every cluster in an InnoDB ClusterSet deployment.
The process to create a MySQL Router account is the same as for
an InnoDB Cluster administrator account, but using a
command. You create the accounts on one member server in the
primary cluster, or use accounts that already exist, if the
primary InnoDB Cluster already existed when you began to
set up the InnoDB ClusterSet deployment. Then let the
replica clusters apply the transactions to create the
accounts on their member servers. For instructions to create
or upgrade a MySQL Router account, see
Section 7.2, “Configuring the MySQL Router User”.
cluster
.setupRouterAccount()