本页面介绍了如何使用时间点恢复 (PITR) 来恢复 Cloud SQL 主实例。
如需详细了解 PITR, 请参阅时间点恢复 (PITR)。
如果您创建 Cloud SQL 企业 Plus 版实例,则 PITR 默认处于启用状态,无论创建时采用何种方法。如果您想停用此功能,则必须手动执行此操作。
如果您在 Google Cloud 控制台中创建 Cloud SQL 企业版实例,则 PITR 在默认情况下处于启用状态。否则,如果您使用 gcloud CLI、Terraform 或 Cloud SQL Admin API 创建实例,则 PITR 默认处于停用状态。在这种情况下,如果您想启用此功能,则必须手动执行此操作。
用于 PITR 的日志存储
Cloud SQL 对 PITR 使用预写式日志记录 (WAL) 归档。我们于 2023 年 1 月 9 日发布了在 Cloud Storage 中存储 PITR 的预写式日志的功能。自从此功能发布以来,以下条件适用:
- 所有 Cloud SQL 企业 Plus 版实例都将其预写式日志存储在 Cloud Storage 中。只有您从 Cloud SQL 企业版升级且在 2023 年 1 月 9 日之前启用了 PITR 的 Cloud SQL 企业 Plus 版实例才会继续将其日志存储在磁盘上。
- 您所创建并在 2023 年 1 月 9 日之前启用了 PITR 的 Cloud SQL 企业版实例会继续将其日志存储在磁盘上。
- 如果您在 2024 年 8 月 15 日之后将在磁盘上存储 PITR 事务日志的 Cloud SQL 企业版实例升级为 Cloud SQL 企业 Plus 版,则升级过程会将用于 PITR 的事务日志的存储位置切换到 Cloud Storage。如需了解详情,请参阅使用就地升级将实例升级到 Cloud SQL 企业 Plus 版。
- 您所创建并在 2023 年 1 月 9 日之后启用 PITR 的所有 Cloud SQL 企业版实例都将其日志存储在 Cloud Storage 中。
对于仅在磁盘上存储预写式日志的实例,您可以使用 gcloud CLI 或 Cloud SQL Admin API 将用于 PITR 的事务日志的存储位置从磁盘切换到 Cloud Storage,而不会造成任何停机时间。如需了解详情,请参阅将交易日志存储切换到 Cloud Storage。
日志保留期限
如需查看实例是否将用于 PITR 的日志存储在 Cloud Storage 中,请按照检查用于 PITR 的事务日志的存储位置操作。
使用 PostgreSQL 客户端(例如 psql
或 pgAdmin
)连接到实例的数据库后,请运行以下命令:show archive_command
。如果有任何预写式日志归档在 Cloud Storage 中,您会看到 -async_archive -remote_storage
出现。
所有其他启用了 PITR 的现有实例都会继续将其日志存储在磁盘上。
如果日志存储在 Cloud Storage 中,则 Cloud SQL 每 5 分钟或更短时间上传一次日志。因此,如果 Cloud SQL 实例可用,则该实例可以恢复到最近时间。但是,如果实例不可用,则恢复点目标通常不超过 5 分钟。使用 gcloud CLI 或 Admin API 检查实例可恢复到的最近时间,并执行到该时间的恢复。
PITR 中使用的预写式日志会连同其关联的自动备份自动删除,通常是在满足为 transactionLogRetentionDays
设置的值后删除。这是 Cloud SQL 为进行 PITR 而保留的事务日志的天数。对于 Cloud SQL 企业 Plus 版,您可以将值设置为 1 到 35;对于 Cloud SQL 企业版,您可以将值设置为 1 到 7。
在启用 PITR 之前,在 Cloud SQL 实例上恢复备份时,您会丢失可用于实现 PITR 的预写式日志。
对于启用了客户管理的加密密钥 (CMEK) 的实例,系统会使用最新版本的 CMEK 加密预写式日志。如需执行恢复操作,应提供所有在为 retained-transaction-log-days
参数配置的天数内保持最新的密钥版本。
对于在 Cloud Storage 中存储预写式日志的实例,日志存储在主实例所在的区域中。此日志存储(对于 PITR 的最大时长,Cloud SQL 企业 Plus 版最多为 35 天,Cloud SQL 企业版最多为 7 天)不会为每个实例产生额外费用。
日志和磁盘使用量
如果实例启用了 PITR,并且磁盘上的预写式日志的大小导致实例出现问题:
您可以使用 gcloud CLI 或 Cloud SQL Admin API,将用于 PITR 的日志的存储位置从磁盘切换到 Cloud Storage,而不会造成停机。
您可以增加实例存储空间大小,但磁盘用量中的预写日志大小的增加可能是临时的。
我们建议启用存储空间自动扩容功能,以避免意外的存储问题。 仅当实例启用了 PITR 且日志存储在磁盘上时,此建议才适用。
如果要删除日志并恢复存储空间,您可以停用 PITR。减少所使用的预写式日志不会缩小为实例预配的磁盘大小。
日志每天完全清除一次,不会持续清除。将日志保留设置为两天意味着系统会保留至少两天、最多三天的日志。我们建议将备份数量设置为日志保留天数加 1。
例如,如果您为
transactionLogRetentionDays
参数的值指定7
,则对于backupRetentionSettings
参数,请将retainedBackups
的数量设置为8
。
启用 PITR
当您在 Google Cloud 控制台中创建新实例时,自动备份和启用时间点恢复都会自动启用。以下过程会在现有主实例上启用 PITR。
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 打开要启用 PITR 的实例对应的“更多操作”菜单
,然后点击修改。
- 在自定义实例下,展开数据保护部分。
- 选中启用时间点恢复复选框。
- 在日志保留天数字段中,输入保留日志的天数(对于 Cloud SQL 企业 Plus 版为 1-35,对于 Cloud SQL 企业版为 1-7)。
- 点击保存。
gcloud
- 显示实例概览:
gcloud sql instances describe INSTANCE_NAME
- 如果您在
backupConfiguration
部分中看到enabled: false
,请启用计划备份:gcloud sql instances patch INSTANCE_NAME \ --backup-start-time=HH:MM
使用 UTC±00 时区的 24 小时制时间指定
backup-start-time
参数。 - 启用 PITR:
gcloud sql instances patch INSTANCE_NAME \ --enable-point-in-time-recovery
如果您要在主实例上启用 PITR,还可以通过添加以下参数来配置要保留事务日志的天数:
--retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
- 确认更改:
gcloud sql instances describe INSTANCE_NAME
在
backupConfiguration
部分中,如果更改成功,您会看到pointInTimeRecoveryEnabled: true
。
Terraform
如需启用 PITR,请使用 Terraform 资源。
应用更改
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
- 启动 Cloud Shell。
-
设置要在其中应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
应用更改
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
删除更改
如需删除更改,请执行以下操作:
- 如需停用删除防护,请在 Terraform 配置文件中将
deletion_protection
参数设置为false
。deletion_protection = "false"
- 运行以下命令并在提示符处输入
yes
,以应用更新后的 Terraform 配置:terraform apply
-
运行以下命令并在提示符处输入
yes
,以移除之前使用 Terraform 配置应用的资源:terraform destroy
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的主实例或读取副本实例的名称
- START_TIME:时间(以小时和分钟为单位)
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "startTime": "START_TIME", "enabled": true, "pointInTimeRecoveryEnabled": true } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的主实例或读取副本实例的名称
- START_TIME:时间(以小时和分钟为单位)
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "startTime": "START_TIME", "enabled": true, "pointInTimeRecoveryEnabled": true } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
对不可用实例执行 PITR
控制台
由于以下原因,您可能需要将不可用的实例恢复到其他可用区:
- 配置了实例的可用区无法访问。此实例处于
FAILED
状态。 - 实例正在进行维护。此实例处于
MAINTENANCE
状态。
如需恢复不可用的实例,请完成以下步骤:
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 找到要克隆的实例的行。
- 在操作列中,点击 更多操作菜单。
- 点击创建克隆。
- 在创建克隆页面上,完成以下操作:
- 在实例 ID 字段中,根据需要更新实例 ID。
- 点击从较早的时间点克隆。
- 在时间点字段中,选择要克隆数据的日期和时间。这将恢复该时间点的实例状态。
- 点击创建克隆。
克隆初始化时,您将返回到实例列表页面。
gcloud
由于配置了实例的可用区无法访问,您可能需要将不可用的实例恢复到其他可用区。
gcloud sql instances clone SOURCE_INSTANCE_NAME TARGET_INSTANCE_NAME \ --point-in-time DATE_AND_TIME_STAMP \ --preferred-zone ZONE_NAME \ --preferred-secondary-zone SECONDARY_ZONE_NAME
运行 gcloud sql instances clone
命令的用户或服务账号必须拥有 cloudsql.instances.clone
权限。如需详细了解运行 gcloud CLI 命令所需的权限,请参阅 Cloud SQL 权限。
REST v1
由于配置了实例的可用区无法访问,您可能需要将不可用的实例恢复到其他可用区。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- SOURCE_INSTANCE_NAME:源实例的名称。
- TARGET_INSTANCE_NAME:目标(克隆)实例的名称。
- DATE_AND_TIME_STAMP:源实例的日期和时间戳,采用世界协调时间 (UTC) 时区和 RFC 3339 格式(例如
2012-11-15T16:19:00.094Z
)。 - ZONE_NAME:可选。目标实例的主可用区的名称。这用于指定与您要克隆的 Cloud SQL 实例不同的主要可用区。对于区域实例,此可用区会替换主要可用区,但次要可用区与该实例相同。
- SECONDARY_ZONE_NAME:可选。目标实例的次要可用区的名称。这用于指定与您要克隆的 Cloud SQL 实例不同的次要可用区。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone
请求 JSON 正文:
{ "cloneContext": { "destinationInstanceName": "TARGET_INSTANCE_NAME", "pointInTime": "DATE_AND_TIME_STAMP", "preferredZone": "ZONE_NAME", "preferredSecondaryZone": "SECONDARY_ZONE_NAME" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
使用 instances.clone
API 方法的用户或服务账号必须拥有 cloudsql.instances.clone
权限。如需详细了解使用 API 方法所需的权限,请参阅 Cloud SQL 权限。
REST v1beta4
由于配置了实例的可用区无法访问,您可能需要将不可用的实例恢复到其他可用区。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- SOURCE_INSTANCE_NAME:源实例的名称。
- TARGET_INSTANCE_NAME:目标(克隆)实例的名称。
- DATE_AND_TIME_STAMP:源实例的日期和时间戳,采用世界协调时间 (UTC) 时区和 RFC 3339 格式(例如
2012-11-15T16:19:00.094Z
)。 - ZONE_NAME:可选。目标实例的主可用区的名称。这用于指定与您要克隆的 Cloud SQL 实例不同的主要可用区。对于区域实例,此可用区会替换主要可用区,但次要可用区与该实例相同。
- SECONDARY_ZONE_NAME:可选。目标实例的次要可用区的名称。这用于指定与您要克隆的 Cloud SQL 实例不同的次要可用区。
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone
请求 JSON 正文:
{ "cloneContext": { "destinationInstanceName": "TARGET_INSTANCE_NAME", "pointInTime": "DATE_AND_TIME_STAMP", "preferredZone": "ZONE_NAME", "preferredSecondaryZone": "SECONDARY_ZONE_NAME" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
使用 instances.clone
API 方法的用户或服务账号必须拥有 cloudsql.instances.clone
权限。如需详细了解使用 API 方法所需的权限,请参阅 Cloud SQL 权限。
获取最近的恢复时间
对于可用实例,您可以执行恢复到最近时间的 PITR。如果实例不可用,并且实例日志存储在 Cloud Storage 中,您可以检索最近的恢复时间并执行到该时间的 PITR。在这两种情况下,您都可以通过为主可用区提供值来将实例恢复到其他主可用区或次要可用区。
gcloud
获取不可用的 Cloud SQL 实例可以恢复到的最近时间。
将 INSTANCE_NAME 替换为您要查询的实例的名称。
gcloud sql instances get-latest-recovery-time INSTANCE_NAME
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID
- INSTANCE_NAME:您要查询最近恢复时间的实例的名称
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#getLatestRecoveryTime", "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z" }
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID
- INSTANCE_NAME:您要查询最近恢复时间的实例的名称
HTTP 方法和网址:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "kind": "sql#getLatestRecoveryTime", "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z" }
执行 PITR
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 打开要恢复的实例对应的“更多操作”菜单
,然后点击创建克隆。
- (可选)在创建克隆页面上,更新新克隆的 ID。
- 选择从较早的时间点克隆。
- 输入 PITR 时间。
- 点击创建克隆。
gcloud
使用 PITR 创建克隆。
替换以下内容:
- SOURCE_INSTANCE_NAME - 您要从中恢复的实例的名称。
- NEW_INSTANCE_NAME - 克隆的名称。
- TIMESTAMP - 源实例的 UTC 时区(采用 RFC 3339 格式)。例如 2012-11-15T16:19:00.094Z。
gcloud sql instances clone SOURCE_INSTANCE_NAME \ NEW_INSTANCE_NAME \ --point-in-time 'TIMESTAMP'
REST v1
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID
- target-instance-id:目标实例 ID
- source-instance-id:源实例 ID
- restore-timestamp:在恢复之前所处的时间点
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone
请求 JSON 正文:
{ "cloneContext": { "kind": "sql#cloneContext", "destinationInstanceName": "target-instance-id", "pointInTime": "restore-timestamp" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID
- target-instance-id:目标实例 ID
- source-instance-id:源实例 ID
- restore-timestamp:在恢复之前所处的时间点
HTTP 方法和网址:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone
请求 JSON 正文:
{ "cloneContext": { "kind": "sql#cloneContext", "destinationInstanceName": "target-instance-id", "pointInTime": "restore-timestamp" } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
停用 PITR
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 打开要停用的实例对应的“更多操作”菜单
,然后选择修改。
- 在自定义实例下,展开数据保护部分。
- 清除启用时间点恢复。
- 点击保存。
gcloud
- 停用时间点恢复:
gcloud sql instances patch INSTANCE_NAME \ --no-enable-point-in-time-recovery
- 确认更改:
gcloud sql instances describe INSTANCE_NAME
在
backupConfiguration
部分中,如果更改成功,您会看到pointInTimeRecoveryEnabled: false
。
REST v1
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID
- instance-id:实例 ID
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "enabled": false, "pointInTimeRecoveryEnabled": false } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- project-id:项目 ID
- instance-id:实例 ID
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "enabled": false, "pointInTimeRecoveryEnabled": false } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
检查用于 PITR 的事务日志的存储位置
您可以检查 Cloud SQL 实例存储用于 PITR 的事务日志的位置。
gcloud
如需确定您的实例是将 PITR 的日志存储在磁盘还是 Cloud Storage 上,请使用以下命令:
gcloud sql instances describe INSTANCE_NAME
将 INSTANCE_NAME 替换为实例名称。
对于同一项目中的多个实例,您还可以查看事务日志的存储位置。如需确定多个实例的位置,请使用以下命令:
gcloud sql instances list --show-transactional-log-storage-state
示例响应:
NAME DATABASE_VERSION LOCATION TRANSACTIONAL_LOG_STORAGE_STATE my_01 POSTGRES_12 us-central-1 DISK my_02 POSTGRES_12 us-central-1 CLOUD_STORAGE ...
在命令的输出中,transactionalLogStorageState
字段或 TRANSACTIONAL_LOG_STORAGE_STATE
列提供有关实例的 PITR 事务日志存储位置的信息。可能的事务日志存储状态如下:
DISK
:实例将用于 PITR 的事务日志存储在磁盘上。 如果您将 Cloud SQL 企业版实例升级到 Cloud SQL 企业 Plus 版,则升级过程会自动将日志存储位置切换到 Cloud Storage。如需了解详情,请参阅使用就地升级将实例升级到 Cloud SQL 企业 Plus 版。 您还可以选择使用 gcloud CLI 或 Cloud SQL Admin API 切换存储位置,而无需升级实例的版本,也不会造成任何停机。如需了解详情,请参阅将交易日志存储切换到 Cloud Storage。SWITCHING_TO_CLOUD_STORAGE
:实例正在将 PITR 事务日志的存储位置切换到 Cloud Storage。SWITCHED_TO_CLOUD_STORAGE
:实例已完成将 PITR 事务日志的存储位置从磁盘切换到 Cloud Storage 的操作。CLOUD_STORAGE
:实例将用于 PITR 的事务日志存储在 Cloud Storage 中。
将事务日志存储空间切换到 Cloud Storage
如果您的实例将用于 PITR 的事务日志存储在磁盘上,则您可以将存储位置切换到 Cloud Storage,而不会造成任何停机时间。切换存储位置的整个过程大约需要事务日志保留期限(以天为单位)的时间才能完成。一旦您启动切换,事务日志就会开始在 Cloud Storage 中累积。在操作期间,您可以使用检查用于 PITR 的事务日志的存储位置中的命令检查整个过程的状态。
转换到 Cloud Storage 的整个过程完成后,Cloud SQL 会使用 Cloud Storage 中的事务日志进行 PITR。
gcloud
如需将存储位置切换到 Cloud Storage,请使用以下命令:
gcloud sql instances patch INSTANCE_NAME \ --switch-transaction-logs-to-cloud-storage
将 INSTANCE_NAME 替换为实例名称。 该实例必须是主实例,而不能是副本实例。响应类似于以下示例:
The following message is used for the patch API method. {"name": "INSTANCE_NAME", "project": "PROJECT_NAME", "switchTransactionalLogsToCloudStorageEnabled": "true"} Patching Cloud SQL instance...done. Updated [https://sqladmin.prod.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME].
如果该命令返回错误,请参阅排查切换到 Cloud Storage 期间出现的问题,了解后续可能需要执行的步骤。
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- INSTANCE_ID:实例 ID。 该实例必须是主实例,而不能是副本实例。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "switchTransactionLogsToCloudStorageEnabled": true }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
如果请求返回错误,请参阅排查切换到 Cloud Storage 期间出现的问题,了解可能的后续步骤。
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- INSTANCE_ID:实例 ID。 该实例必须是主实例,而不能是副本实例。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "switchTransactionLogsToCloudStorageEnabled": true }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
如果请求返回错误,请参阅排查切换到 Cloud Storage 期间出现的问题,了解可能的后续步骤。
设置事务日志保留
如需设置保留预写式日志的天数,请执行以下操作:
控制台
-
在 Google Cloud 控制台中,转到 Cloud SQL 实例页面。
- 打开要为其设置事务日志的实例对应的“更多操作”菜单
,然后选择修改。
- 在自定义实例下,展开数据保护部分。
- 在启用时间点恢复部分中,展开高级选项。
- 输入保留日志的天数(对于 Cloud SQL 企业 Plus 版为 1-35,对于 Cloud SQL 企业版为 1-7)。
- 点击保存。
gcloud
修改实例以设置保留预写日志的天数。
替换以下内容:
- INSTANCE_NAME:要为其设置事务日志的实例的名称。
DAYS_TO_RETAIN:要保留的事务日志的天数。对于 Cloud SQL 企业 Plus 版,有效范围介于 1 到 35 天之间,默认值为 14 天。对于 Cloud SQL 企业版,有效范围介于 1 到 7 天之间,默认值为 7 天。
如果您未指定值,Cloud SQL 会使用默认值。此选项仅在启用 PITR 时有效。保留更多天数的事务日志需要更大的存储空间。
gcloud sql instances patch INSTANCE_NAME
--retained-transaction-log-days=DAYS_TO_RETAIN
REST v1
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- INSTANCE_ID:实例 ID。
DAYS_TO_RETAIN:保留事务日志的天数。对于 Cloud SQL 企业 Plus 版,有效范围介于 1 到 35 天之间,默认值为 14 天。对于 Cloud SQL 企业版,有效范围介于 1 到 7 天之间,默认值为 7 天。
如果未指定任何值,则使用默认值。此选项仅在启用 PITR 时有效。保留更多天数的事务日志需要更大的存储空间。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "transactionLogRetentionDays": "DAYS_TO_RETAIN" } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:项目 ID。
- INSTANCE_ID:实例 ID。
DAYS_TO_RETAIN:保留事务日志的天数。对于 Cloud SQL 企业 Plus 版,有效范围介于 1 到 35 天之间,默认值为 14 天。对于 Cloud SQL 企业版,有效范围介于 1 到 7 天之间,默认值为 7 天。
如果未指定任何值,则使用默认值。此选项仅在启用 PITR 时有效。保留更多天数的事务日志需要更大的存储空间。
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
请求 JSON 正文:
{ "settings": { "backupConfiguration": { "transactionLogRetentionDays": "DAYS_TO_RETAIN" } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
问题排查
问题 | 问题排查 |
---|---|
或
|
您提供的时间戳无效。 |
或
|
您提供的时间戳是找不到备份或二进制日志坐标的时间。 |
排查切换到 Cloud Storage 的问题
下表列出了在将事务日志的存储位置从磁盘切换到 Cloud Storage 时,可能会返回的错误代码 INVALID REQUEST
。
问题 | 问题排查 |
---|---|
Switching the storage location of the transaction logs
used for PITR is not supported for instances with database type %s.
|
确保您是在 Cloud SQL for MySQL 或 Cloud SQL for PostgreSQL 实例上运行 gcloud CLI 命令或发出 API 请求。Cloud SQL for SQL Server 不支持使用 gcloud CLI 或 Cloud SQL Admin API 切换事务日志的存储位置。 |
PostgreSQL transactional logging is not enabled on this instance.
|
PostgreSQL 使用预写式日志记录作为时间点恢复 (PITR) 的事务日志。为了支持 PITR,PostgreSQL 要求您在实例上启用预写式日志记录。如需详细了解如何启用预写式日志记录,请参阅启用 PITR。 |
This instance is already storing transaction logs used for PITR in
Cloud Storage
|
如需验证事务日志的存储位置,请运行检查用于 PITR 的事务日志的存储位置中的命令。 |
The instance is already switching transaction logs used for PITR from disk
to Cloud Storage.
|
等待切换操作完成。 如需验证操作状态和事务日志的存储位置,请参阅检查用于 PITR 的事务日志的存储位置中的命令。 |
后续步骤
- 在克隆上配置标志