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

6.11 升级元数据模式

随着 AdminAPI 的发展,一些版本可能需要您升级现有集群集、副本集和集群的元数据,以确保它们与更新版本的 MySQL Shell 兼容。例如,在版本 8.0.19 中添加 InnoDB 副本集意味着元数据模式已升级到版本 2.0。无论您是否计划使用 InnoDB 副本集,要使用 MySQL Shell 8.0.19 或更高版本以及使用早期版本的 MySQL Shell 部署的集群,您必须升级集群的元数据。

警告

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

  • Cluster.status()

  • Cluster.describe()

  • Cluster.options()

The dba.upgradeMetadata() 操作将 MySQL Shell 当前连接到的集群集、副本集或 InnoDB 集群上找到的元数据模式版本与该 MySQL Shell 版本支持的元数据模式版本进行比较。如果找到的元数据版本较低,则会启动升级过程。然后,dba.upgradeMetadata() 函数会更新任何自动创建的 MySQL 路由器用户,使其具有正确的权限。手动创建的 MySQL 路由器用户,其名称不以 mysql_router_ 开头,不会自动升级。这是升级集群集、副本集或 InnoDB 集群的重要步骤,只有这样才能升级 MySQL 路由器元数据。要查看有关哪些与集群集、副本集或集群注册的 MySQL 路由器实例需要元数据升级的信息,请使用 .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 对象中。

要升级集群集、副本集或集群的元数据,请将 MySQL Shell 的全局会话连接到您的集群集、副本集或集群,并使用 dba.upgradeMetadata() 操作将集群集、副本集或集群的元数据升级到新的元数据。例如

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

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

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

  • dryRun: 是一个布尔值,用于启用升级过程的试运行。如果使用 dryRundba.upgradeMetadata() 函数将确定是否需要元数据升级或还原,并在实际执行操作之前通知您。

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

    此选项已弃用,将在 MySQL Shell 的未来版本中删除。

如果您遇到与集群集、副本集或集群管理用户缺少权限相关的错误,请使用相关的 .setupAdminAccount() 操作,并使用 update 选项来授予用户正确的权限

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

    参见 InnoDB 集群管理员帐户.

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