当您在 Google Cloud 控制台中创建新实例时,自动备份和时间点恢复 (PITR) 都会自动启用。您可以按以下步骤为任何现有实例配置 PITR:
启用 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-bin-log
如果您要在主实例上启用 PITR,还可以通过添加以下参数来配置要保留事务日志的天数:
--retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS - 确认更改:
gcloud sql instances describe INSTANCE_NAME
在
backupConfiguration部分,如果更改成功,您会看到binaryLogEnabled: 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,
"binaryLogEnabled": true
}
}
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
REST v1beta4
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:包含实例的 Google Cloud 项目的 ID 或项目编号
- INSTANCE_NAME:您为实现高可用性而配置的主实例或读取副本实例的名称
- START_TIME:时间(以小时和分钟为单位)
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
请求 JSON 正文:
{
"settings":
{
"backupConfiguration":
{
"startTime": "START_TIME",
"enabled": true,
"binaryLogEnabled": true
}
}
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
停用 PITR
控制台
-
在 Google Cloud 控制台中,前往 Cloud SQL 实例页面。
- 打开要停用的实例对应的“更多操作”菜单
,然后选择修改。 - 在自定义实例下,展开数据保护部分。
- 清除启用时间点恢复。
- 点击保存。
gcloud
- 停用时间点恢复:
gcloud sql instances patch INSTANCE_NAME \ --no-enable-bin-log
- 确认更改:
gcloud sql instances describe INSTANCE_NAME
在
backupConfiguration部分,如果更改成功,您会看到binaryLogEnabled: 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,
"binaryLogEnabled": 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,
"binaryLogEnabled": false
}
}
}
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
设置事务日志保留
如需设置保留二进制日志的天数:
控制台
-
在 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 响应:
检查用于 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 MYSQL_8_0 us-central-1 DISK my_02 MYSQL_8_0 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 期间出现的问题,了解可能的后续步骤。
切换后的事务日志存储和配置
出于复制目的,Cloud SQL 仍会在磁盘上保留二进制日志的副本。
如果您想使用 mysqlbinlog 实用程序浏览二进制日志,将二进制日志存储在磁盘上就非常有用。
如果您在切换之前在实例上配置了 expire_logs_days 或 binlog_expire_logs_seconds 标志,则配置的值将保持不变。
切换后,由于用于执行 PITR 的二进制日志现在存储在 Cloud Storage 中,因此请确保标志的值反映了您预期的磁盘上事务日志的保留情况。Cloud SQL 仅按照以下最小值之一在磁盘上保留日志:
- 切换前的
transactionLogRetentionDaysPITR 配置设置。此设置的默认值为 7 天。 - 您在实例上手动设置的
expire_logs_days或binlog_expire_logs_seconds标志。
如果要节省磁盘空间,请在切换过程完成后,将 expire_logs_days 或 binlog_expire_logs_seconds 标志的值配置为 1 天,以便减小分配的磁盘大小和磁盘存储费用。如需详细了解事务日志存储和 PITR,请参阅 PITR 的日志存储。
如需详细了解如何检查磁盘使用量,请参阅日志和磁盘使用量。
排查切换到 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 切换事务日志的存储位置。 |
MySQL transactional logging is not enabled on this instance.
|
MySQL 使用二进制日志记录作为时间点恢复 (PITR) 的事务日志。为了支持 PITR,MySQL 要求您在实例上启用二进制日志记录。如需详细了解如何启用二进制日志记录,请参阅启用 PITR。 |
This command is not supported on replica instances.
Run the command on the primary instance instead.
|
请确保在运行命令或发出 API 请求时指定主实例。 |
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 的事务日志的存储位置中的命令。 |
后续步骤
- 在克隆上配置标志