升级 MySQL 8.0 的数据库次要版本

Cloud SQL for MySQL 支持多个 MySQL 8.0 次要版本,并在默认次要版本(比最新次要版本低一个次要版本)上预配 MySQL 8.0 实例。

在每次发布新的次要版本时,数据库提供方都会发布新功能、安全补丁、bug 修复和性能改进。

MySQL 8.0 不支持降级。

自动升级

Cloud SQL 支持自动升级未与特定次要版本关联的 Cloud SQL for MySQL 8.0 实例的次要版本。实例必须运行 MySQL 8.0.35 版或更高版本。

如果已为实例启用次要版本自动升级,则 Cloud SQL for MySQL 8.0 实例会在定期安排的维护更新期间自动升级到 Cloud SQL for MySQL 8.0 的默认次要版本。 您不再需要手动执行次要版本升级,即可让 Cloud SQL for MySQL 实例及时获得 MySQL 社区发布的最新安全补丁和 bug 修复。

检查是否已启用次要版本自动升级

如需检查是否已为实例启用次要版本自动升级,请运行以下命令:

gcloud sql instances describe INSTANCE_NAME \
--project=PROJECT_ID

INSTANCE_NAME 替换为实例的名称,并将 PROJECT_ID 替换为实例的项目 ID。 在命令的输出中,找到以下字段。

  • databaseVersion:该值必须为 MYSQL_8_0
  • databaseInstalledVersion:该值必须是等于或高于 MYSQL_8_0_35 的次要版本

手动升级

本部分介绍如何手动升级 Cloud SQL for MySQL 8.0 实例的次要版本。如果您运行的是 Cloud SQL for MySQL 8.0.34 版或更早版本,则必须手动升级 Cloud SQL for MySQL 的次要版本。

在升级到新的 MySQL 8.0 次要版本之前,请先自行熟悉其中的变化。请参阅 MySQL 8.0 版本说明。如果您使用的是 Cloud SQL for MySQL 5.6 或 5.7,Cloud SQL 会自动管理实例的次要版本。在您预配新实例时,Cloud SQL 会自动使用最新可用数据库版本配置您的实例。在例行维护期间,Cloud SQL 会自动将您的实例升级到最新的受支持版本。

要升级 MySQL 8.0 实例的数据库次要版本,您需要使用首选次要版本更新实例,而且这个版本必须高于当前安装的次要版本。预配实例后,您就不能再还原到未指定的次要版本。

如果您运行的是 Cloud SQL 企业 Plus 版实例,那么次要版本升级的停机时间接近于零

手动升级前的准备工作

Cloud SQL 支持 MySQL 8.0 实例的次要版本升级。MySQL 8.0 不允许降级。因此,在升级主实例之前,请先执行以下步骤以确保数据安全。

  1. 选择数据库的目标次要版本

    gcloud

    如需了解如何安装和开始使用 gcloud CLI,请参阅安装 gcloud CLI。如需了解如何启动 Cloud Shell,请参阅使用 Cloud Shell

    如需了解数据库的哪些次要版本可进行就地升级,请执行以下操作:

    1. 运行以下命令:
    2. gcloud sql instances describe INSTANCE_NAME
         

      INSTANCE_NAME 替换为实例名称。

    3. 在命令的输出中,找到标记为 upgradableDatabaseVersions 的部分。
    4. 每个子部分都会返回一个可升级的数据库版本。在每个子部分中,请查看以下字段。
      • name:数据库版本字符串,其中包含 Cloud SQL for MySQL 次要版本就地升级的数据库目标主要版本和次要版本。

    REST v1

    如需了解数据库的哪些次要版本可进行就地升级,请使用 Cloud SQL Admin API 的 instances.get 方法。

    在使用任何请求数据之前,请先进行以下替换:

    • INSTANCE_NAME:实例名称。

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    
    upgradableDatabaseVersions:
    
    {
      major_version: "MYSQL_8_0"
      name: "MYSQL_8_0_36"
      display_name: "MySQL 8.0.36"
    }
    
    

    REST v1beta4

    如需了解数据库的哪些次要版本可进行就地升级,请使用 Cloud SQL Admin API 的 instances.get 方法。

    在使用任何请求数据之前,请先进行以下替换:

    • INSTANCE_NAME:实例名称。

    HTTP 方法和网址:

    GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

    如需发送您的请求,请展开以下选项之一:

    您应该收到类似以下内容的 JSON 响应:

    
    upgradableDatabaseVersions:
    
    {
      major_version: "MYSQL_8_0"
      name: "MYSQL_8_0_36"
      display_name: "MySQL 8.0.36"
    }
    
    

    如需查看 Cloud SQL 支持的数据库版本的完整列表,请参阅数据库版本和版本政策

  2. 在预演环境中对您的升级执行测试。

    1. 创建生产实例的克隆,用作预演实例。这将创建一个使用相同主要版本和次要版本的新数据库实例。

    2. 在预演实例上执行次要版本升级。

    3. 运行工作负载测试,以验证升级是否成功、应用是否按预期运行。在测试成功的情况下,继续升级您的读取副本实例。

  3. 升级您的读取副本实例。

    1. 将数据库中的所有读取副本升级到目标次要版本。

    2. 验证您的应用是否按预期工作。

  4. 备份您的主实例。

    请备份您的主实例,就像执行任何重大数据库更新时一样。

升级次要版本

您可以使用 gcloud 或 REST API 指定一个现有实例的次要版本。在不使用数据库的时候执行次要版本升级。如果您的实例需要重启,那么实例会有一些停机时间。Cloud SQL 企业 Plus 版实例的停机时间几乎为零。如果安装的版本高于所请求的版本,则请求会被拒绝。

gcloud

使用带有 --database-version 标志的 gcloud sql instances patch 命令。

在运行命令之前替换以下变量:

  • INSTANCE_NAME:实例的名称。
  • DATABASE_VERSION:实例的数据库版本。如果您未指定此标志,则系统使用默认主要版本。
gcloud sql instances patch INSTANCE_NAME \
   --database-version=DATABASE_VERSION

REST v1

将 PATCH 请求与 instances:patch 方法和 databaseVersion 标志结合使用。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:项目 ID
  • INSTANCE_ID:实例 ID
  • DATABASE_VERSION:要升级到的数据库版本。

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

请求 JSON 正文:

{
  "databaseVersion": "DATABASE_VERSION"
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-07-17T20:23:15.540Z",
  "operationType": "UPDATE",
  "name": "fa3f7304-ccf6-4d2f-a6f5-24df00000032",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/fa3f7304-ccf6-4d2f-a6f5-24df00000032",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

将 PATCH 请求与 instances:patch 方法和 databaseVersion 标志结合使用。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:项目 ID
  • INSTANCE_ID:实例 ID
  • DATABASE_VERSION:要升级到的数据库版本。

HTTP 方法和网址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_ID

请求 JSON 正文:

{
  "databaseVersion": "DATABASE_VERSION"
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2022-07-17T20:23:15.540Z",
  "operationType": "UPDATE",
  "name": "fa3f7304-ccf6-4d2f-a6f5-24df00000032",
  "targetId": "INSTANCE-ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/fa3f7304-ccf6-4d2f-a6f5-24df00000032",
  "targetProject": "PROJECT_ID"
}

检查数据库次要安装版本

查看实例摘要信息时,数据库次要安装版本会显示在“配置”部分中。

回滚升级

如果您在测试升级时发现存在问题,则可能需要回滚数据库,以恢复运行先前次要版本的数据库实例。

如需恢复升级前的备份,请完成以下步骤:

  1. 预配使用先前的次要版本的恢复数据库实例。
  2. 将该恢复数据库实例上的设置配置为升级前状态。
  3. 恢复您存储到恢复实例的升级前备份。

作为恢复备份的替代方案,您可以执行时间点恢复并创建新实例。