MySQL Shell 9.0  /  MySQL AdminAPI  /  升级元数据模式

6.11 升级元数据模式

随着 AdminAPI 的发展,某些版本可能需要您升级现有 ClusterSet、ReplicaSet 和 Cluster 的元数据,以确保它们与较新版本的 MySQL Shell 兼容。例如,在 8.0.19 版本中添加了 InnoDB ReplicaSet,这意味着元数据模式已升级到 2.0 版。无论您是否计划使用 InnoDB ReplicaSet,要使用 8.0.19 或更高版本的 MySQL Shell 与使用早期版本的 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('[email protected]: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() 函数将确定是否需要元数据升级或还原,并在不实际执行操作的情况下告知您。

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

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

    请参阅 InnoDB Cluster 管理员帐户.

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