创建实例

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

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

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

准备工作

  1. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到“项目选择器”

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

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

    转到 IAM 页面

    详细了解角色和权限。

创建 PostgreSQL 实例

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

控制台

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

    转到“Cloud SQL 实例”页面

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

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

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

  5. postgres 用户输入密码。
  6. 选择实例的数据库版本:PostgreSQL 13(默认值)、PostgreSQL 12、PostgreSQL 11、PostgreSQL 10 或 PostgreSQL 9.6。

    在创建实例后,数据库版本便无法修改。

  7. 选择区域和地区可用性下,为实例选择区域和地区。

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

    如果将实例配置为高可用性示例,则可以同时选择主要地区和次要地区。

    在创建实例期间使用次要地区时,适用以下条件:

    • 主要地区默认为 Any,次要地区默认为 Any (different from primary)
    • 如果同时指定主要地区和次要地区,则它们必须是不同的地区。
  8. 自定义实例下,更新实例的设置。首先点击显示配置选项以显示设置群组。然后展开所需群组以查看和自定义设置。所有选定选项的总结会显示在右侧。

    下表是实例设置的快速参考。如需详细了解各项设置,请参阅实例设置页面。

    设置 备注
    机器类型
    机器类型从共享核心、轻量级、标准(最常用)或高内存中进行选择。
    自定义 点击此按钮可创建具有灵活配置的实例。选择此选项后,需要为实例选择核心数量和内存量。了解详情
    连接
    核心 实例的 vCPU 数。了解详情
    内存 实例的内存量(以 GB 为单位)。了解详情
    存储
    存储类型 此设置决定您的实例使用 SSD 还是 HDD 存储空间。了解详情
    存储空间容量 为实例预配的存储空间量。了解详情
    启用存储空间自动扩容功能 该设置决定了在可用空间不足时,Cloud SQL 是否自动为您的实例提供更多存储空间。了解详情
    加密
    由 Google 管理的加密默认选项。
    客户管理的加密密钥 (CMEK)选择此项以将您的密钥与 Google Cloud Key Management Service 搭配使用。了解详情
    连接
    专用 IP 为您的实例添加专用 IP 地址。需要进行额外配置,才能连接到实例。了解详情
    公共 IP 为您的实例添加公共 IP 地址。 然后,您可以添加已获授权的网络来连接到该实例。了解详情
    已获授权的网络添加新网络的名称和网络地址。了解详情
    备份
    自动备份 您希望系统开始执行备份的时间范围。了解详情
    选择存储备份的位置对于大多数用例,请选择多区域。如果需要将备份存储在特定区域中(例如出于监管原因而需要这样做),请选择“区域”并从“位置”下拉菜单中选择您的区域。
    选择要存储多少个自动备份您想要保留的自动备份数量(1 到 365 天)。了解详情
    启用时间点恢复 启用时间点恢复和预写式日志记录。了解详情
    选择要保留多少天的日志 将预写式日志保留时间配置为 1 到 7 天。默认设置为 7 天。了解详情
    维护
    首选时段 该设置用于确定 Cloud SQL 可对您的实例执行中断性维护的时段(时长为一小时)。如果您没有设置此时段,则系统可能会随时执行中断性维护。了解详情
    更新顺序 相对于同一项目内的其他实例,此实例的首选更新时间。了解详情
    标志
    添加标志 您可以使用数据库标志来控制实例的设置和参数。了解详情
    标签
    添加标签为您添加的每个标签添加键和值。您可以使用标签来帮助组织实例。
  9. 点击创建

gcloud

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

  1. 创建实例:
    gcloud sql instances create INSTANCE_NAME --database-version=POSTGRES_12
     --cpu=NUMBER_CPUS --memory=MEMORY_SIZE
     --region=REGION --gce-zone=GCE_ZONE --zone=ZONE
    
    或者,如果您选择 db-f1-micro 或 db-g1-small 作为机器类型,则可以使用“--tier”标志:
    gcloud sql instances create INSTANCE_NAME --tier=API_TIER_STRING --region=REGION
    

    vCPU 和内存大小值存在一定的限制:

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

    例如,以下字符串会创建一个具有两个 vCPU 和 7680 MB 内存的实例:

     gcloud sql instances create myinstance --database-version=POSTGRES_12 --cpu=2
     --memory=7680MB --region=us-central
    
    如需详细了解如何调整 --cpu--memory 的大小,请参阅灵活的实例配置

    REGION 的默认值为 us-central

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

    如果您要创建高可用性实例,则可以使用 --zone--secondary-zone 参数同时指定主要地区和次要地区。在创建或修改实例期间使用次要地区时,适用以下条件:

    • 地区必须是有效的地区。
    • 如果指定了次要地区,则必须指定主要地区。
    • 如果同时指定主要地区和次要地区,则它们必须是不同的地区。
    • 如果指定了主要地区和次要地区,则它们必须属于同一区域。

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

    设置 参数 备注
    必需参数
    数据库版本 --database-version POSTGRES_13(默认)、POSTGRES_12POSTGRES_11POSTGRES_10POSTGRES_9_6
    区域 --region 查看有效值
    连接
    专用 IP --network 指定您要用于此实例的 VPC 网络的名称。网络必须已配置专用服务访问权限。仅适用于 Beta 版命令 (gcloud beta sql instances create)。 了解详情
    公共 IP --authorized-networks 只有来自已获授权网络的公共 IP 连接才能连接到您的实例。了解详情
    机器类型和存储空间
    机器类型 --tier 用于指定共享核心实例(db-f1-microdb-g1-small)。对于灵活的实例配置,请使用 --cpu--memory 参数。请参阅灵活的实例配置
    存储类型 --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了解详情
    次要可用区 --secondary-zone 如果您要创建高可用性实例,则可以使用 >--zone--secondary-zone parameters 同时指定主要地区和次要地区。在创建或修改实例期间使用次要地区时,适用以下条件:
    • 地区必须是有效的地区。
    • 如果指定了次要地区,则必须指定主要地区。
    • 如果指定了主要地区和次要地区,则它们必须是不同的地区。

      如果指定了主要地区和次要地区,则它们必须属于同一区域。

    自动备份 --backup-start-time 您希望系统开始执行备份的时间范围。了解详情
    自动备份的保留设置 --retained-backups-count 要保留的自动备份数量。了解详情
    时间点恢复 --enable-point-in-time recovery 启用时间点恢复和预写式日志记录。了解详情
    二进制日志记录的保留设置 --retained-transaction-log-days 要为时间点恢复保留预写式日志的天数。了解详情
    添加数据库标志
    数据库标志 --database-flags 您可以使用数据库标志来控制实例的设置和参数。详细了解数据库标志
    维护时间表
    维护期 --maintenance-window-day
    --maintenance-window-hour
    该设置用于确定 Cloud SQL 可对您的实例执行中断性维护的时间范围(时长为一小时)。如果您没有设置此时间范围,则系统可能会随时执行中断性维护。 了解详情
    维护时间 --maintenance-release-channel 相对于同一项目内的其他实例,此实例的首选更新时间。如果提前更新,则使用 preview;如果延后更新,则使用 production了解详情

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

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

  3. postgres 用户设置密码:
    gcloud sql users set-password postgres --instance=INSTANCE_NAME --password=PASSWORD
    

REST v1beta4

创建实例

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

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

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

  • project-id:您的项目 ID
  • instance-id:所需的实例 ID
  • region:所需地区
  • database-version:数据库版本的枚举字符串。例如 POSTGRES_12
  • password:根用户的密码
  • machine-type:机器(层级)类型的枚举字符串,例如:db-custom-[CPUS]-[MEMORY_MBS]

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "name": "instance-id",
  "region": "region",
  "databaseVersion": "database-version",
  "rootPassword": "password",
  "settings": {
    "tier": "machine-type",
    "backupConfiguration": {
      "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": "2020-01-01T19:13:21.834Z",
  "operationType": "CREATE",
  "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:insert 页面上的 APIs Explorer

灵活的实例配置

灵活的实例配置允许您选择实例需要的内存大小和 CPU。这种灵活性可让您选择适合您的工作负载的虚拟机形状。机器类型名称使用 db-custom-CPU-RAM 格式,其中 CPU 是机器中 CPU 的数量,RAM 是机器中的内存量(以 MB 为单位)。

选择 CPU 数量和内存量时,您选择的配置有一些限制:

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

问题排查

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

针对此问题… 可能的原因… 请尝试以下操作…
Internal error 缺少 Service Networking 服务帐号。 停用 Service Networking API,然后重新启用
Terraform 实例创建失败。 Terraform 配置错误。 检查并修复 Teraform 配置文件
Terraform 脚本中出现 HTTP Error 409 另一个操作已在进行中。 修复 Terraform 脚本,等待每项操作完成。
Unknown error

Service Networking API 可能未启用。

您尝试创建的实例可能与最近删除的实例同名。

您可能尝试同时创建多个实例。

启用 Service Networking API。

为该实例使用其他名称,或等到实例删除一周后再使用。

连续创建实例。

如果这与您的情况不匹配,请查看其他未知错误消息。

Failed to create subnetwork 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 的错误消息。

可能的原因

  • 启用的 Service Networking API 可能未启用。
  • 您可能正在尝试重新使用最近删除的实例的名称。实例名称在删除后的一周内不能重新使用。
  • 您可能正在尝试同时创建多个实例。在这种情况下,系统只会创建第一个实例,无法创建剩余实例并显示 Unknown error。一次只能运行一个创建操作。

可以尝试的操作

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

未能创建子网

您看到错误消息:Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider.

可能的原因

分配的 IP 范围中没有更多的可用地址。

如果在尝试通过专用服务连接,针对共享 VPC 网络使用专用 IP 创建 Cloud SQL 实例时遇到此错误。有五种可能的场景:

  • 专用服务连接所分配 IP 地址范围的大小小于 /24。
  • 专用服务连接所分配 IP 范围的大小对于 Cloud SQL 实例数量而言太小。
  • 您正尝试在 VPC 宿主项目的同一专用服务连接上创建 MySQL 或 SQL Server 和 PostgreSQL 实例。MySQL 和 SQL Server 可以共享相同的服务连接。PostgreSQL 需要自己的服务连接。
  • 您正尝试在不同区域的同一专用服务连接上创建实例,但这样做不受支持。

可以尝试的操作

对于上述每种场景,您可以选择展开现有 IP 范围,也可以选择分配其他 IP 范围给专用服务连接。

如果您要分配新的范围,请注意不要创建与任何现有分配重叠的分配。

创建新的 IP 地址范围后,使用以下命令更新 VPC 对等互连:

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com
--ranges=[OLD_RESERVED_RANGE_NAME],[NEW_RESERVED_RANGE_NAME] --network=[VPC_NETWORK]
--project=[PROJECT_ID] --force

如果要扩展现有分配,请注意只能扩大分配范围,不能缩减分配范围。例如,如果原始分配是 10.0.10.0/24,则新分配至少为 10.0.10.0/23。

一般来说,如果从 /24 分配开始,对于每个条件(额外的实例类型组、额外的区域),将“/子网掩码位数”递减 1 是一种较好的做法。例如,如果尝试在同一分配中创建两个实例类型组,则从 /24 递减到 /23 就足够了。

扩展现有 IP 地址范围后,使用以下命令更新 VPC 对等互连:

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com
--ranges=[RESERVED_RANGE_NAME] --network=[VPC_NETWORK] --project=[PROJECT_ID]

后续步骤