Documentation Home
MySQL 外壳 8.0  / 第 6 章 MySQL AdminAPI  /  6.11 升级元数据模式

6.11 升级元数据模式

随着 AdminAPI 的发展,某些版本可能需要您升级现有 ClusterSet、ReplicaSet 和 Clusters 的元数据,以确保它们与更新版本的 MySQL Shell 兼容。比如在8.0.19版本中加入了InnoDB ReplicaSet,意味着元数据schema升级到了2.0版本。无论您是否计划使用 InnoDB ReplicaSet,要将 MySQL Shell 8.0.19 或更高版本与使用早期版本的 MySQL Shell 部署的集群一起使用,您必须升级集群的元数据。

警告

如果不升级元数据,您将无法使用 MySQL Shell 更改使用早期版本创建的集群的配置。例如,您只能对集群执行读取操作,例如:

  • Cluster.status()

  • Cluster.describe()

  • Cluster.options()

dba.upgradeMetadata()操作将在 MySQL Shell 当前连接到的 ClusterSet、ReplicaSet 或 InnoDB Cluster 上找到的元数据模式版本与此 MySQL Shell 版本支持的元数据模式版本进行比较。如果找到的元数据版本较低,则启动升级过程。该 dba.upgradeMetadata()函数然后更新任何自动创建的 MySQL Router 用户以具有正确的权限。手动创建名称不以开头的 MySQL Router 用户mysql_router_不会自动升级。这是升级 ClusterSet、ReplicaSet 或 InnoDB Cluster 的重要步骤,只有这样才能升级 MySQL Router 元数据。要查看有关注册到 ClusterSet、ReplicaSet 或 Cluster 的哪些 MySQL Router 实例需要元数据升级的信息,请使用该 .listRouters()函数。例如,要列出与集群关联的路由器实例,使用分配的变量cluster问题:

cluster.listRouters({'onlyUpgradeRequired':'true'})
{
    "clusterName": "mycluster",
    "routers": {
        "example.com::": {
            "hostname": "example.com",
            "lastCheckIn": "2019-11-26 10:10:37",
            "roPort": 6447,
            "roXPort": 64470,
            "rwPort": 6446,
            "rwXPort": 64460,
            "version": "8.0.18"
        }
    }
}

在此示例中,onlyUpgradeRequired选项包含在listRouters()函数中。这 onlyUpgradeRequired是一个启用过滤的布尔值,因此只有支持旧版本元数据模式并需要升级的路由器实例才会包含在返回的 JSON 对象中。

要升级 ClusterSet、ReplicaSet 或 Cluster 的元数据,请将 MySQL Shell 的全局会话连接到您的 ClusterSet、ReplicaSet 或 Cluster,并使用该 dba.upgradeMetadata()操作将 ClusterSet、ReplicaSet 或 Cluster 的元数据升级为新的元数据。例如:

mysql-js> shell.connect('user@example.com:3306')

mysql-js> dba.upgradeMetadata()
InnoDB Cluster Metadata Upgrade

The cluster you are connected to is using an outdated metadata schema version
1.0.1 and needs to be upgraded to 2.0.0.

Without doing this upgrade, no AdminAPI calls except read only operations will
be allowed.

The grants for the MySQL Router accounts that were created automatically when
bootstrapping need to be updated to match the new metadata version's
requirements.
Updating router accounts...
NOTE: 2 router accounts have been updated.

Upgrading metadata at 'example.com:3306' from version 1.0.1 to version 2.0.0.
Creating backup of the metadata schema...
Step 1 of 1: upgrading from 1.0.1 to 2.0.0...
Removing metadata backup...
Upgrade process successfully finished, metadata schema is now on version 2.0.0

如果安装的元数据版本较低,则会启动升级过程。

dba.upgradeMetadata()函数接受以下选项:

  • dryRun: 是一个布尔值,用于启用升级过程的空运行。如果dryRun使用,该dba.upgradeMetadata()函数会确定是否需要元数据升级或恢复,并在不实际执行操作的情况下通知您。

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

如果遇到与 ClusterSet、ReplicaSet 或 Cluster 管理用户缺少权限相关的错误,请使用.setupAdminAccount()带有更新选项的相关操作来授予用户正确的权限:

  • 创建或升级具有管理 InnoDB 集群所需权限的 MySQL 用户帐户: <Cluster>.setupAdminAccount(user, options)

    请参阅 InnoDB Cluster 管理员帐户

  • 创建或升级具有管理 InnoDB ReplicaSet 所需权限的 MySQL 用户帐户: <ReplicaSet>.setupAdminAccount(user, options)