发送反馈
执行时间点恢复 (PITR)
无论 Cloud SQL 主实例处于有效状态还是已删除,您都可以使用时间点恢复 (PITR) 来恢复该实例。借助 PITR,您可以将实例恢复到特定的时间点。对于已删除的实例,您可以将该实例恢复到特定时间点,并恢复到新实例或现有实例。
Cloud SQL 提供以下选项来使用 PITR 恢复实例:
如需对不可用或已删除的实例执行 PITR,您需要找到最近和最早恢复时间 。
控制台
在 Google Cloud 控制台中,前往 Cloud SQL 实例 页面。
转到“Cloud SQL 实例”
打开要恢复的实例对应的“更多操作”菜单 ,然后点击创建克隆 。
(可选)在创建克隆 页面上,更新新克隆的 ID。
选择从较早的时间点克隆 。
输入 PITR 时间。
选择所有数据库 ,或指定数据库名称。 如果您指定数据库名称,则只能选择一个名称。默认情况下,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 '
注意: 默认情况下,时间点恢复适用于所有数据库。(可选)您最多可以指定一个特定数据库名称,如下所示:--database_names 'DATABASE'
REST v1
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
target-instance-id :目标实例 ID
source-instance-id :源实例 ID
restore-timestamp :在恢复之前所处的时间点
在 JSON 请求中,您可以选择按如下所示最多指定一个特定数据库名称:"databaseNames": "my-database"
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 :在恢复之前所处的时间点
在 JSON 请求中,您可以选择按如下所示最多指定一个特定数据库名称:"databaseNames": "my-database"
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
如果您的 Cloud SQL 实例已启用增强型备份 ,则可以使用备份保险柜对该实例执行时间点恢复。
控制台
在 Google Cloud 控制台中,前往 Cloud SQL 实例 页面。
转到“Cloud SQL 实例”
打开要恢复的实例对应的“更多操作”菜单 ,然后点击创建克隆 。
选择从较早的时间点克隆 。
输入 PITR 时间。
点击创建克隆 。
gcloud 如需对备份保险柜中的实例执行 PITR,您需要找到最接近要执行 PITR 的时间的备份的 data-source。如需查找备份,请参阅列出备份保险柜中实例的所有备份 。确定备份后,运行以下命令以执行 PITR:
gcloud sql instances point-in-time-restore DATA_SOURCE
PITR_TIMESTAMP
--project=TARGET_PROJECT
替换以下内容:
DATA_SOURCE :最接近您要恢复到的 PITR 时间戳的备份的 data-source 路径。
PITR_TIMESTAMP :您要将实例恢复到的源实例 PITR 日志的 UTC 时间戳,采用 RFC 3339 格式。例如 2012-11-15T16:19:00.094Z。
TARGET_PROJECT :Cloud SQL 实例的项目 ID。
如需使用 PITR 恢复已删除的实例,您需要:
您要将实例恢复到的 PITR 时间戳 (timestamp)
目标实例名称
源实例的删除时间 (source-instance-deletion-time)
您只能使用 gcloud CLI 或 Cloud SQL API 对已删除的实例使用 PITR。如需了解详情,请参阅使用 PITR 恢复已删除的实例 。
gcloud 查找 PITR 窗口
如需查找已删除实例的 PITR 窗口,请获取该实例的最早和最近恢复时间 。您可以在此窗口中选择任意时间戳来执行 PITR。
查找源实例删除时间和日志保留天数
实例删除后,系统会将已删除实例的 source-instance-deletion-time 和 log-retention-days 与为您的实例保留的备份一起存储。如需查找已删除实例的这些值,请参阅列出保留的备份 。
使用 PITR 进行恢复
如需使用 PITR 恢复已删除的实例,请运行以下命令:
gcloud sql instances clone SOURCE_INSTANCE_NAME \
NEW_INSTANCE_NAME \
--point-in-time='PITR_TIMESTAMP ' \
--source-instance-deletion-time=SOURCE_INSTANCE_DELETION_TIMESTAMP
替换以下内容:
SOURCE_INSTANCE_NAME :您要恢复的源实例的名称。
NEW_INSTANCE_NAME :新实例的名称。
PITR_TIMESTAMP :您要将实例恢复到的源实例 PITR 日志的 UTC 时间戳,采用 RFC 3339 格式。例如,2012-11-15T16:19:00.094Z。
SOURCE_INSTANCE_DELETION_TIMESTAMP :源实例的删除时间(采用 RFC 3339 格式)的 UTC 时间戳。
例如 2012-11-15T16:19:00.094Z。
REST v1 查找 PITR 窗口
如需查找已删除实例的 PITR 窗口,请获取该实例的最早和最近恢复时间 。您可以在此窗口中选择任意时间戳来执行 PITR。
查找源实例删除时间和日志保留天数
实例删除后,系统会将已删除实例的 source-instance-deletion-time 和 log-retention-days 与为您的实例保留的备份一起存储。如需查找已删除实例的这些值,请参阅列出保留的备份 。
使用 PITR 进行恢复
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
target-instance-id :目标实例 ID
source-instance-id :源实例 ID
source-instance-deletion-time :源实例的删除时间
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 ",
"sourceInstanceDeletionTime: "source-instance-deletion-time ",
"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": "CLONE",
"name": "operation-id ",
"targetId": "target-instance-id ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
REST v1beta4 查找 PITR 窗口
如需查找已删除实例的 PITR 窗口,请获取该实例的最早和最近恢复时间 。您可以在此窗口中选择任意时间戳来执行 PITR。
查找源实例删除时间和日志保留天数
实例删除后,系统会将已删除实例的 source-instance-deletion-time 和 log-retention-days 与为您的实例保留的备份一起存储。如需查找已删除实例的这些值,请参阅列出保留的备份 。
使用 PITR 进行恢复
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
target-instance-id :目标实例 ID
source-instance-id :源实例 ID
source-instance-deletion-time :源实例的删除时间
restore-timestamp 您要将实例恢复到的时间点
在 JSON 请求中,您可以选择按如下所示最多指定一个特定数据库名称:"databaseNames": "my-database"
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 ",
"sourceInstanceDeletionTime: "source-instance-deletion-time ",
"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 以恢复到实例 PITR 窗口中的任何时间戳。PITR 窗口从最早恢复时间开始,到最近恢复时间结束。如果实例不可用,并且实例日志存储在 Cloud Storage 中,或者实例已删除且启用了 PITR 保留 ,您可以检索最早和最近恢复时间,并执行到该窗口内的任何时间戳的 PITR。
在所有情况下,您都可以通过为主可用区提供值来将实例恢复到其他主可用区或次要可用区 。
gcloud 不可用实例
如需获取不可用的 Cloud SQL 实例可以恢复到的最早和最近时间,请运行以下命令:
gcloud sql instances get-latest-recovery-time INSTANCE_NAME
替换以下内容:
INSTANCE_NAME :您要查找最近恢复时间的实例的名称。
实例已删除
如需获取 Cloud SQL 已删除实例可以恢复到的最早和最近时间,请运行以下命令:
gcloud sql instances get-latest-recovery-time INSTANCE_NAME
--source-instance-deletion-time='SOURCE_INSTANCE_DELETION_TIMESTAMP '
替换以下内容:
INSTANCE_NAME :您要查找最近恢复时间的实例的名称。
SOURCE_INSTANCE_DELETION_TIMESTAMP :源实例的删除时间(采用 RFC 3339 格式)的 UTC 时间戳。
例如 2012-11-15T16:19:00.094Z。
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",
"earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
"latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}
实例已删除
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID :项目 ID
INSTANCE_NAME :您要查询最近恢复时间的源实例的名称
SOURCE_INSTANCE_DELETION_TIME :源实例删除的时间
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",
"earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
"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",
"earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
"latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}
实例已删除
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID :项目 ID
INSTANCE_NAME :您要查询最近恢复时间的源实例的名称
SOURCE_INSTANCE_DELETION_TIME :源实例删除的时间
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",
"earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
"latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}
问题排查
问题
问题排查
argument --point-in-time: Failed to parse date/time:
Unknown string format: 2021-0928T30:54:03.094;
received: 2021-0928T30:54:03.094Z
或
Invalid value at 'body.clone_context.point_in_time'
(type.googleapis.com/google.protobuf.Timestamp), Field 'pointInTime',
Invalid time format: Failed to parse input,
您提供的时间戳无效。
HTTP Error 400: Successful backup required for carrying out the
operation was not found.
或
Successful backup required for carrying out the operation was not
found. or Time where no backups can be found.
您提供的时间戳是找不到备份或二进制日志坐标的时间。
后续步骤
发送反馈
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可 获得了许可,并且代码示例已根据 Apache 2.0 许可 获得了许可。有关详情,请参阅 Google 开发者网站政策 。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-11-21。
需要向我们提供更多信息?
[[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["很难理解","hardToUnderstand","thumb-down"],["信息或示例代码不正确","incorrectInformationOrSampleCode","thumb-down"],["没有我需要的信息/示例","missingTheInformationSamplesINeed","thumb-down"],["翻译问题","translationIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2025-11-21。"],[],[]]