本页面介绍如何创建 Cloud SQL for PostgreSQL 实例。
如需详细了解所有实例设置,请参阅实例设置。
在创建实例期间,向实例添加一个数据库。如需添加其他数据库,您可以创建或导入这些数据库。
准备工作
-
登录您的 Google 帐号。
如果您还没有 Google 帐号,请注册一个新帐号。
-
在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能。
- 安装并初始化 Cloud SDK。
-
确保您的用户帐号具有 Cloud SQL Admin 和 Compute Viewer 角色。
详细了解角色和权限。
创建 PostgreSQL 实例
如需创建 PostgreSQL 实例,请执行以下操作:
控制台
- 转到 Google Cloud Console 中的“Cloud SQL 实例”页面。
- 点击创建实例。
- 选择 PostgreSQL,然后点击下一步。
- 输入名称。
请勿在实例名称中包含敏感信息或个人身份信息,因为此名称对外可见。
无需在实例名称中包含项目 ID。此操作将在适当的位置(例如在日志文件中)自动完成。
- 为
postgres
用户输入密码。 - 在位置下,为实例选择地区和区域。
将实例与访问实例的资源置于相同地区内。以后无法更改选择的地区。大多数情况下,您不需要指定区域。
- 在配置选项下,更新实例的设置:
设置 备注 数据库版本 在创建实例后,数据库版本便无法修改。 数据库版本 控制台:PostgreSQL 13、PostgreSQL 12(默认)、PostgreSQL 11、PostgreSQL 10 或 PostgreSQL 9.6。
API:POSTGRES_13、POSTGRES_12、POSTGRES_11、POSTGRES_10、POSTGRES_9_6连接 专用 IP 为您的实例添加专用 IP 地址。如需启用连接到实例的功能,需要进行额外配置。 公共 IP 为您的实例添加公共 IP 地址。需要进行额外配置,才能连接到实例。 机器类型和存储空间 核心 实例的 vCPU 数。了解详情。 内存 实例的内存量(以 GB 为单位)。了解详情。 存储类型 此设置决定您的实例使用 SSD 还是 HDD 存储空间。了解详情。 存储空间容量 为实例预配的存储空间量。了解详情。 存储空间自动扩容 该设置决定了在可用空间不足时,Cloud SQL 是否自动为您的实例提供更多存储空间。了解详情。 高可用性 如果您需要将实例配置为高可用性实例,则必须选中高可用性(地区级)复选框。了解详情。 自动备份 您希望系统开始执行备份的时间范围。了解详情。 自动备份的保留设置 您想要保留的自动备份数量(1 到 365 天)。了解详情。 时间点恢复 启用时间点恢复和预写式日志记录。了解详情。 预写式日志记录的保留设置 将预写式日志保留时间配置为 1 到 7 天。默认设置为 7 天。了解详情。 添加数据库标志 数据库标志 您可以使用数据库标志来控制实例的设置和参数。了解详情。 维护时间表 维护期 该设置用于确定 Cloud SQL 可对您的实例执行中断性维护的时段(时长为一小时)。如果您没有设置此时段,则系统可能会随时执行中断性维护。了解详情。 维护时间 相对于同一项目内的其他实例,此实例的首选更新时间。了解详情。 详细了解实例设置。
- 点击创建。
gcloud
如需了解如何安装和开始使用 gcloud
命令行工具,请参阅安装 Cloud SDK。如需了解如何启动 Cloud Shell,请参阅 Cloud Shell 文档。
- 创建实例:
gcloud sql instances create INSTANCE_NAME --database-version=POSTGRES_12 --cpu=NUMBER_CPUS --memory=MEMORY_SIZE --region=REGION --gce-zone=GCE_ZONE --zone=ZONE
或者:gcloud sql instances create INSTANCE_NAME --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_13
、POSTGRES_12
(默认)、POSTGRES_11
、POSTGRES_10
或POSTGRES_9_6
地区 --region
查看有效值。 连接 专用 IP --network
指定您要用于此实例的 VPC 网络的名称。网络必须已配置专用服务访问权限。仅适用于 Beta 版命令 ( gcloud beta sql instances create
)。 了解详情。公共 IP --authorized-networks
只有来自已获授权网络的公共 IP 连接才能连接到您的实例。了解详情。 机器类型和存储空间 机器类型 --tier
用于指定共享核心实例( db-f1-micro
或db-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
您希望系统开始执行备份的时间范围。了解详情。 自动备份的保留设置 --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
。了解详情。 - 请记下系统自动分配的 IP 地址。
如果您未使用 Cloud SQL 代理,则需要使用此地址作为应用或工具用来连接实例的主机地址。
- 为
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
字段。
机器类型示例
借助自定义机器类型,您可以为实例配置其所需的内存容量和 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 地址范围同时创建多个实例。
可以尝试的操作
为该实例使用其他名称,或者等待一周,然后使用该名称创建新实例。连续创建多个实例,而不是同时创建。