本页面介绍了如何使用时间点恢复 (PITR) 来恢复 Cloud SQL 主实例。
如需详细了解 PITR,请参阅 PITR 。
默认情况下,在您创建 Cloud SQL 企业 Plus 版实例时,系统会启用 PITR,无论您使用 Google Cloud 控制台、gcloud CLI 、Terraform 还是 Cloud SQL Admin API。
如果您在 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 企业版实例会继续将其日志存储在磁盘上。
您所创建并在 2023 年 1 月 9 日之后启用 PITR 的所有 Cloud SQL 企业版实例都将其日志存储在 Cloud Storage 中。
对于仅在磁盘上存储预写式日志的实例,您可以先停用 PITR,然后再重新启用 PITR,从而将日志从磁盘移动到 Cloud Storage。
注意 :将预写式日志从磁盘移动到 Cloud Storage 会导致出现几分钟的停机时间,并且先前的 PITR 日志会丢失。出现停机时间的原因是必须重启实例,而且在您停用 PITR 后,日志会被清除。
日志保留期限
如需查看实例是否将用于 PITR 的日志存储在 Cloud Storage 中,请按照检查用于 PITR 的事务日志的存储位置 操作。
使用 PostgreSQL 客户端(例如 psql
或 pgAdmin
)连接到实例的数据库后,请运行以下命令:show archive_command
。如果有任何预写式日志归档在 Cloud Storage 中,您会看到 -async_archive -remote_storage
。
所有其他启用了 PITR 的现有实例都会继续将其日志存储在磁盘上。在 Cloud Storage 中存储日志的更改会在之后生效。
如果日志存储在 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,并且磁盘上的预写式日志的大小导致实例出现问题:
您可以停用然后重新启用 PITR,以确保新日志存储在 Cloud Storage 中与实例相同的区域处。但是,所有现有预写式日志都会被删除,因此您执行时间点恢复的时间不能早于您重新启用 PITR 的时间。
您可以增加实例存储空间大小,但磁盘用量中的预写式日志大小的增加可能是临时的。
我们建议启用存储空间自动扩容功能 ,以避免意外的存储问题。 仅当实例启用了 PITR 且日志存储在磁盘上时,此建议才适用。
如果要删除日志并恢复存储空间,您可以停用 PITR。减少所使用的预写式日志不会缩小为实例预配的磁盘大小。
日志每天完全清除一次,不会持续清除。将日志保留设置为两天意味着系统会保留至少两天、最多三天的日志。我们建议将备份数量设置为日志保留天数加 1,以保证日志至少保留指定的最少天数。
启用 PITR
当您在 Google Cloud 控制台中创建新实例时,
自动备份 和
启用时间点恢复 都会自动启用。
以下过程会在现有主实例上启用 PITR。
控制台
在 Google Cloud 控制台中,转到 Cloud SQL 实例 页面。
转到“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
。
如需启用 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 示例通常假定您的 Google Cloud 项目中启用了所需的 API。
删除更改
如需删除更改,请执行以下操作:
如需停用删除防护,请在 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
}
}
}
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_NAME "
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method PATCH ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_NAME " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_NAME ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "UPDATE",
"name": "OPERATION_ID ",
"targetId": "INSTANCE_NAME ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /operations/OPERATION_ID ",
"targetProject": "PROJECT_ID "
}
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
}
}
}
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_NAME "
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method PATCH ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_NAME " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_NAME ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "UPDATE",
"name": "OPERATION_ID ",
"targetId": "INSTANCE_NAME ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /operations/OPERATION_ID ",
"targetProject": "PROJECT_ID "
}
获取最近的恢复时间
对于可用实例,您可以执行恢复到最近时间的 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
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
执行以下命令:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_NAME /getLatestRecoveryTime"
PowerShell (Windows)
执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID /instances/INSTANCE_NAME /getLatestRecoveryTime" | Select-Object -Expand Content
您应该收到类似以下内容的 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
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
执行以下命令:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_NAME /getLatestRecoveryTime"
PowerShell (Windows)
执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method GET ` -Headers $headers ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID /instances/INSTANCE_NAME /getLatestRecoveryTime" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
{
"kind": "sql#getLatestRecoveryTime",
"latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}
控制台
在 Google Cloud 控制台中,转到 Cloud SQL 实例 页面。
转到“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 "
}
}
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/source-instance-id /clone"
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/source-instance-id /clone" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/target-instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "CREATE",
"name": "operation-id ",
"targetId": "target-instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
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 "
}
}
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/source-instance-id /clone"
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/source-instance-id /clone" | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/target-instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "CREATE",
"name": "operation-id ",
"targetId": "target-instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
停用 PITR
控制台
在 Google Cloud 控制台中,转到 Cloud SQL 实例 页面。
转到“Cloud SQL 实例”
打开要停用的实例对应的“更多操作”菜单 ,然后选择修改 。
在自定义实例 下,展开数据保护 部分。
清除启用时间点恢复 。
点击保存 。
在实例的概览 页面中的配置 下,PITR 设置被列为已停用。
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
}
}
}
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id "
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method PATCH ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "UPDATE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
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
}
}
}
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id "
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method PATCH ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "UPDATE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
检查用于 PITR 的事务日志的存储位置
您可以检查 Cloud SQL 实例存储用于 PITR 的事务日志的位置。
gcloud
如需确定您的实例是将 PITR 的日志存储在磁盘还是 Cloud Storage 上,请使用以下命令:
gcloud sql instances describe INSTANCE_NAME
将 INSTANCE_NAME 替换为实例名称。
在命令的输出中,transactionalLogStorageState
字段提供有关为实例存储 PITR 事务日志的位置的信息。可能的事务日志存储状态如下:
DISK
:实例将用于 PITR 的事务日志存储在磁盘上。
CLOUD_STORAGE
:实例将用于 PITR 的事务日志存储在 Cloud Storage 中。
设置事务日志保留
如需设置保留预写式日志的天数,请执行以下操作:
控制台
在 Google Cloud 控制台中,转到 Cloud SQL 实例 页面。
转到“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 天。如果未指定任何值,则使用默认值。仅在启用 PITR 时有效。保留更多天数的事务日志需要更大的存储空间。
gcloud sql instances patch INSTANCE-NAME \
--retained-transaction-log-days=DAYS-TO-RETAIN
REST v1
在使用任何请求数据之前,请先进行以下替换:
days-to-retain :保留事务日志的天数(1 到 7 天)
project-id :项目 ID
instance-id :实例 ID
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id
请求 JSON 正文:
{
"settings":
{
"backupConfiguration":
{
"transactionLogRetentionDays": "days-to-retain "
}
}
}
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id "
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method PATCH ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "UPDATE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
days-to-retain :保留事务日志的天数(1 到 7 天)
project-id :项目 ID
instance-id :实例 ID
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id
请求 JSON 正文:
{
"settings":
{
"backupConfiguration":
{
"transactionLogRetentionDays": "days-to-retain "
}
}
}
如需发送您的请求,请展开以下选项之一:
curl(Linux、macOS 或 Cloud Shell)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id "
PowerShell (Windows)
将请求正文保存在名为 request.json
的文件中,然后执行以下命令:
$cred = gcloud auth print-access-token $headers = @{ "Authorization" = "Bearer $cred" } Invoke-WebRequest ` -Method PATCH ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile request.json ` -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/instance-id ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "UPDATE",
"name": "operation-id ",
"targetId": "instance-id ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
后续步骤