创建实例

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

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

创建 Cloud SQL 实例后,您可以通过创建导入数据库来向该实例添加数据库。

准备工作

  1. 登录您的 Google 帐号。

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

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

    转到项目选择器页面

  3. 确保您的 Google 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. 位置下,为实例选择地区和区域。

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

  7. 配置选项下,更新实例的设置:
    设置 备注
    数据库版本
    数据库版本 PostgreSQL 12(默认)、PostgreSQL 11、PostgreSQL 10 和 PostgreSQL 9.6
    连接
    专用 IP 为您的实例添加专用 IP 地址。如需启用连接到实例的功能,需要进行额外配置
    公共 IP 为您的实例添加公共 IP 地址。需要进行额外配置,才能连接到实例。
    机器类型和存储空间
    核心数 实例的 vCPU 数。了解详情
    内存 实例的内存量(以 GB 为单位)。了解详情
    存储类型 此设置决定您的实例使用 SSD 还是 HDD 存储空间。了解详情
    存储空间容量 为实例预配的存储空间量。了解详情
    存储空间自动扩容 该设置决定了在可用空间不足时,Cloud SQL 是否自动为您的实例提供更多存储空间。了解详情
    高可用性 如果您需要将实例配置为高可用性实例,则必须选中高可用性(地区级)复选框。了解详情
    自动备份 您希望系统开始执行备份的时间范围。了解详情
    时间点恢复 启用时间点恢复和预写式日志记录。了解详情
    添加数据库标志
    数据库标志 您可以使用数据库标志来控制实例的设置和参数。了解详情
    维护时间表
    维护期 该设置用于确定 Cloud SQL 可对您的实例执行中断性维护的时段(时长为一小时)。如果您没有设置此时段,则系统可能会随时执行中断性维护。了解详情
    维护时间 相对于同一项目内的其他实例,此实例的首选更新时间。了解详情

    详细了解实例设置

  8. 点击创建

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]
    
    or, alternatively:
    
    gcloud sql instances create instance --tier=[API_TIER_STRING] --region=[REGION]
    

    [API_TIER_STRING] 的值是自定义机器类型(在此处定义)。这些名称包括 vCPU 和内存值。例如,db-custom-2-7680 机器类型包含 2 个 vCPU 和 7680 内存 (MB)。

    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"
    

    如需了解一些示例值,请参阅机器类型示例

    您还可以创建共享核心实例,方法是使用 --tier db-f1-micro--tier db-g1-small 并丢弃 --cpu--memory 参数。

    [REGION] 的默认值为 us-central

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

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

    设置 参数 备注
    必需参数
    数据库版本 --database-version POSTGRES_12(默认)、POSTGRES_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了解详情
    自动备份 --backup-start-time 您希望系统开始执行备份的时间范围。了解详情
    时间点恢复 --enable-point-in-time recovery 启用时间点恢复和预写日志记录。了解详情
    添加数据库标志
    数据库标志 --database-flags 您可以使用数据库标志来控制实例的设置和参数。 详细了解数据库标志
    维护时间表
    维护期 --maintenance-window-day
    --maintenance-window-hour
    该设置用于确定 Cloud SQL 可对您的实例执行中断性维护的时间范围(时长为一小时)。如果您没有设置此时间范围,则系统可能会随时执行中断性维护。 了解详情
    维护时间 --maintenance-release-channel 相对于同一项目内的其他实例,此实例的首选更新时间。如果提前更新,则使用 preview;如果延后更新,则使用 production了解详情

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

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

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

REST

创建实例

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

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

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

  • project-id:您的项目 ID
  • instance-id:所需实例 ID
  • region:所需地区
  • machine-type:所需的机器类型

HTTP 方法和网址:

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

请求 JSON 正文:

{
  "name": "instance-id",
  "region": "region",
  "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"
}

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

检索 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)

下面根据 PostgreSQL 实例适用的预定义机器类型,列举了一些示例机器类型值:

预定义机器类型 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 地址范围同时创建多个实例。

可以尝试的操作

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

后续步骤