创建实例

本页面介绍如何创建 Cloud SQL for MySQL 实例。

如需详细了解所有实例设置,请参阅实例设置

在创建实例期间,向实例添加一个数据库。如需添加其他数据库,您可以创建导入这些数据库。

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能

  4. 安装并初始化 Cloud SDK
  5. 确保您的用户帐号具有 Cloud SQL Admin 和 Compute Viewer 角色。

    转到 IAM 页面

    详细了解角色和权限。

创建 MySQL 实例

如需创建 MySQL 实例,请执行以下操作:

控制台

  1. 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。

    转到“Cloud SQL 实例”页面

  2. 点击创建实例
  3. 选择 MySQL,再点击下一步
  4. 输入名称。

    请勿在实例名称中包含敏感信息或个人身份信息,因为此名称对外可见。

    无需在实例名称中包含项目 ID。此操作将在适当的位置(例如在日志文件中)自动完成。

  5. 'root'@'%' 用户输入密码。
  6. 位置下,为实例选择地区和区域。

    将实例与访问实例的资源置于相同地区内。以后无法更改选择的地区。大多数情况下,您不需要指定区域。

  7. 配置选项下,更新实例的设置:
    设置 备注
    数据库版本 在创建实例后,数据库版本便无法修改。
    数据库版本 控制台:MySQL 8.0、MySQL 5.7(默认)或 MySQL 5.6。
    API:MYSQL_8_0、MYSQL_5_7(默认)或 MYSQL_5_6
    连接
    专用 IP 为您的实例添加专用 IP 地址。如需启用连接到实例的功能,需要进行额外配置
    公共 IP 为您的实例添加公共 IP 地址。需要进行额外配置,才能连接到实例。
    机器类型和存储空间
    机器类型 机器类型(有时也称为“层级”)决定了您的实例所具备的 CPU 数量和内存容量。了解详情
    存储类型 此设置决定您的实例使用 SSD 还是 HDD 存储空间。了解详情
    存储空间容量 为实例预配的存储空间量。了解详情
    存储空间自动扩容 该设置决定了在可用空间不足时,Cloud SQL 是否自动为您的实例提供更多存储空间。了解详情
    高可用性 如果您需要将实例配置为高可用性实例,则必须选中高可用性(地区级)复选框。了解详情
    自动备份 您希望系统开始执行备份的时间范围。了解详情
    二进制日志记录 二进制日志记录支持副本和时间点恢复。了解详情
    添加数据库标志
    数据库标志 您可以使用数据库标志来控制实例的设置和参数。了解详情
    维护时间表
    维护期 该设置用于确定 Cloud SQL 可对您的实例执行中断性维护的时段(时长为一小时)。如果您没有设置此时段,则系统可能会随时执行中断性维护。了解详情
    维护时间 相对于同一项目内的其他实例,此实例的首选更新时间。了解详情

    详细了解实例设置

  8. 点击创建

gcloud

如需了解如何安装和开始使用 gcloud 命令行工具,请参阅安装 Cloud SDK。如需了解如何启动 Cloud Shell,请参阅 Cloud Shell 文档

  1. 显示潜在机器类型列表:
    gcloud sql tiers list
    

    请注意以 db- 开头的值。您必须从中选择一个值,才能创建第二代实例。

    如需了解不同机器类型、其功能及其对实例定价的影响,请参阅价格页面

  2. 创建实例:
    gcloud sql instances create INSTANCE_NAME --tier=MACHINE_TYPE --region=REGION
    

    请勿在实例名称中包含敏感信息或个人身份信息,因为此名称对外可见。
    无需在实例名称中包含项目 ID。此操作将在适当的位置(例如在日志文件中)自动完成。

    MACHINE_TYPE 是上一步中以 db- 开头的值之一。

    例如,以下命令会在伦敦地区创建一个名为 instance1 的第二代实例,其机器类型为 db-n1-standard-2

    gcloud sql instances create instance1 --tier=db-n1-standard-2 --region=europe-west2
    

    您可以添加更多参数来确定其他实例设置:

    设置 参数 备注
    必需参数
    数据库版本 --database-version MYSQL_8_0MYSQL_5_7(默认值)或 MYSQL_5_6
    地区 --region 查看有效值
    连接
    专用 IP --network 指定您要用于此实例的 VPC 网络的名称。网络必须已配置专用服务访问权限。仅适用于 Beta 版命令 (gcloud beta sql instances create)。 了解详情
    公共 IP --authorized-networks 只有来自已获授权网络的公共 IP 连接才能连接到您的实例。 了解详情
    机器类型和存储空间
    机器类型 --tier 机器类型决定了您的实例所具备的 CPU 数量和内存容量。查看默认值。 您还可以创建自定义机器类型了解详情
    存储类型 --storage-type 此设置决定您的实例使用 SSD 还是 HDD 存储空间。了解详情
    存储空间容量 --storage-size 为实例预配的存储空间量(以 GB 为单位)。 了解详情
    存储空间自动扩容 --storage-auto-increase 该设置决定了在可用空间不足时,Cloud SQL 是否自动为您的实例提供更多存储空间。了解详情
    存储空间自动扩容上限 --storage-auto-increase-limit 此设置决定了 Cloud SQL 能自动将存储空间扩容到多大的程度。 仅适用于 Beta 版命令 (gcloud beta sql instances create)。 了解详情
    自动备份和高可用性
    高可用性 --availability-type 对于高可用性实例,请将此项设置为 REGIONAL了解详情
    自动备份 --backup-start-time 您希望系统开始执行备份的时间范围。了解详情
    二进制日志记录 --enable-bin-log 二进制日志记录支持副本和时间点恢复。了解详情
    添加数据库标志
    数据库标志 --database-flags 您可以使用数据库标志来控制实例的设置和参数。详细了解数据库标志详细了解如何设置此参数的格式
    维护时间表
    维护期 --maintenance-window-day
    --maintenance-window-hour
    该设置用于确定 Cloud SQL 可对您的实例执行中断性维护的时间范围(时长为一小时)。如果您没有设置此时间范围,则系统可能会随时执行中断性维护。 了解详情
    维护时间 --maintenance-release-channel 相对于同一项目内的其他实例,此实例的首选更新时间。如果提前更新,则使用 preview;如果延后更新,则使用 production了解详情

  3. 请记下系统自动分配的 IP 地址。

    如果您未使用 Cloud SQL 代理,则需要使用此地址作为应用或工具用来连接实例的主机地址。

  4. 为 MySQL 用户“root@%”设置密码:
    gcloud sql users set-password root --host=% --instance INSTANCE_NAME --password PASSWORD
    

REST v1beta4

创建实例

本示例会创建一个启用了备份和二进制日志记录功能的实例。这些设置是可选的。如需查看此调用的完整参数列表,请参阅 Instances:insert 页面。如需了解实例设置,包括针对各地区和机器类型的有效值,请参阅实例设置

请勿在实例 ID 中包含敏感信息或个人身份信息,因为此 ID 对外可见。
无需在实例名称中包含项目 ID。此操作将在适当的位置(例如在日志文件中)自动完成。

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

  • project-id:您的项目 ID
  • instance-id:所需实例 ID
  • database-version:数据库版本的枚举字符串。例如:MYSQL_5_7
  • region:所需区域
  • machine-type:所需的机器类型

HTTP 方法和网址:

POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances

请求 JSON 正文:

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "settings": {
    "tier": "machine-type",
    "backupConfiguration": {
      "binaryLogEnabled": true,
      "enabled": true
    }
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2019-09-25T22:19:33.735Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

该响应是一个长时间运行的操作,可能需要几分钟才能完成。

更新 root 密码

实例完成初始化后,请更新 root 密码:

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

  • project-id:您的项目 ID
  • instance-id:在上一步中创建的实例 ID
  • root-password:所需的 root 密码

HTTP 方法和网址:

PUT https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/users?host=%25&name=root

请求 JSON 正文:

{
  "name": "root",
  "host": "%",
  "password": "root-password"
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "status": "DONE",
  "user": "user@example.com",
  "insertTime": "2019-09-26T14:32:30.592Z",
  "startTime": "2019-09-26T14:32:30.594Z",
  "endTime": "2019-09-26T14:32:33.518Z",
  "operationType": "UPDATE_USER",
  "name": "operation-id",
  "targetId": "instance-id",
  "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}

该响应是一个长时间运行的操作,可能需要几分钟才能完成。

检索 IPv4 地址

检索为新实例自动分配的 IPv4 地址:

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

  • project-id:您的项目 ID
  • instance-id:在上一步中创建的实例 ID

HTTP 方法和网址:

GET https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

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

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

{
  "kind": "sql#instance",
  "state": "RUNNABLE",
  "databaseVersion": "MYSQL_5_7",
  "settings": {
    "authorizedGaeApplications": [],
    "tier": "db-f1-micro",
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "SYNCHRONOUS",
    "activationPolicy": "ALWAYS",
    "ipConfiguration": {
      "authorizedNetworks": [],
      "ipv4Enabled": true
    },
    "locationPreference": {
      "zone": "us-west1-a",
      "kind": "sql#locationPreference"
    },
    "dataDiskType": "PD_SSD",
    "backupConfiguration": {
      "startTime": "18:00",
      "kind": "sql#backupConfiguration",
      "enabled": true,
      "binaryLogEnabled": true
    },
    "settingsVersion": "1",
    "storageAutoResizeLimit": "0",
    "storageAutoResize": true,
    "dataDiskSizeGb": "10"
  },
  "etag": "--redacted--",
  "ipAddresses": [
    {
      "type": "PRIMARY",
      "ipAddress": "10.0.0.1"
    }
  ],
  "serverCaCert": {
    ...
  },
  "instanceType": "CLOUD_SQL_INSTANCE",
  "project": "project-id",
  "serviceAccountEmailAddress": "redacted@gcp-sa-cloud-sql.iam.gserviceaccount.com",
  "backendType": "SECOND_GEN",
  "selfLink": "https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id",
  "connectionName": "project-id:region:instance-id",
  "name": "instance-id",
  "region": "us-west1",
  "gceZone": "us-west1-a"
}

在响应中查找 ipAddress 字段。

如需了解如何为此任务构造底层 REST API 请求,请参阅 instances:post 页面上的 API Explorer

机器类型示例

借助自定义机器类型,您可以为实例配置其所需的内存容量和 CPU 数量。但是这些值也有一定的限制:

  • vCPU 的数量必须为 1 或介于 2 至 96 之间的偶数。
  • 内存必须符合以下条件:
    • 每个 vCPU 的内存量介于 0.9 至 6.5 GB 之间
    • 内存量是 256 MB 的倍数
    • 内存量至少为 3.75 GB (3840 MB)

下面列举了一些示例机器类型值,它们基于 MySQL 实例可用的预定义机器类型:

预定义机器类型 vCPU 内存 (MB) API 层字符串
db-n1-standard-1 1 3840 db-custom-1-3840
db-n1-standard-2 2 7680 db-custom-2-7680
db-n1-standard-4 4 15360 db-custom-4-15360
db-n1-standard-8 8 30720 db-custom-8-30720
db-n1-standard-16 16 61440 db-custom-16-61440
db-n1-standard-32 32 122880 db-custom-32-122880
db-n1-standard-64 64 245760 db-custom-64-245760
db-n1-standard-96 96 368640 db-custom-96-368640
db-n1-highmem-2 2 13312 db-custom-2-13312
db-n1-highmem-4 4 26624 db-custom-4-26624
db-n1-highmem-8 8 53248 db-custom-8-53248
db-n1-highmem-16 16 106496 db-custom-16-106496
db-n1-highmem-32 32 212992 db-custom-32-212992
db-n1-highmem-64 64 425984 db-custom-64-425984
db-n1-highmem-96 96 638976 db-custom-96-638976

问题排查

点击表中的链接可查看详细信息:

针对此问题… 可能的原因… 请尝试以下操作…
Internal error 缺少 Service Networking 服务帐号。 停用 Service Networking API,然后重新启用
Terraform 实例创建失败。 Terraform 配置错误。 检查并修复 Teraform 配置文件
Terraform 脚本中出现 HTTP Error 409 另一个操作已在进行中。 修复 Terraform 脚本,等待每项操作完成。
Unknown error 尝试创建的实例与最近删除的实例同名。或者尝试使用新的专用 IP 地址范围同时创建多个实例。 为该实例使用其他名称,或等到实例删除一周后再使用。使用不同名称连续重新创建失败的实例

内部错误

您看到错误消息 {"ResourceType":"sqladmin.v1beta4.instance", "ResourceErrorCode":"INTERNAL_ERROR","ResourceErrorMessage":null}

可能的原因

服务项目可能缺少此功能所需的 Service Networking 服务帐号。

可以尝试的操作

如需修复服务权限,请停用 Service Networking API,等待五分钟,然后重新启用。


Terraform 实例创建失败

Terraform 实例创建失败。

可能的原因

这通常是 Terraform 脚本本身的问题。

可以尝试的操作

检查并修复 Terraform 配置文件。


Terraform 脚本中出现 409 错误

您在 Terraform 脚本中看到错误消息 HTTP Error 409

可能的原因

Operation failed because another operation was already in progress

可以尝试的操作

对此脚本进行修改以停止执行,直到每项实例操作完成。让脚本轮询并等到针对前一个操作 ID 返回 200,然后再继续下一步。


未知错误

尝试创建实例时,您会看到类似于 Cloud SQL creation failed, error UNKNOWN 的错误消息。

可能的原因

您很可能正在尝试重新使用最近删除的实例的名称。实例名称在删除后的一周内不能重新使用。或者,当使用 Unknown error 仅创建了第一个实例而其他实例失败时,您尝试使用新的专用 IP 地址范围同时创建多个实例。

可以尝试的操作

为该实例使用其他名称,或者等待一周,然后使用该名称创建新实例。连续创建多个实例,而不是同时创建。

后续步骤