发送反馈
管理读取副本
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
本页面介绍如何管理读取副本。相关操作包括停用和启用复制功能、提升副本、配置并行复制以及检查复制状态。
如需详细了解复制的工作原理,请参阅 Cloud SQL 中的复制 。
本页面适用于 Cloud SQL 实例的副本。如需设置 Cloud SQL 实例以充当外部订阅者的发布者,请参阅配置外部副本 。
重要提示 :在使用此功能之前,请查看限制 。另请注意,此功能仅适用于以下版本的 Cloud SQL for SQL Server:SQL Server 2017 Enterprise、SQL Server 2019 Enterprise 和 SQL Server 2022 Enterprise。
停用复制功能
默认情况下,复制功能会随副本的启动而启用。 但您可以停用复制功能,例如,要对实例状态进行调试或分析时。准备就绪后,您可以明确重新启用复制功能。停用或重新启用复制功能不会重启副本实例。
停用复制功能并不会使副本实例停止,而是使该实例变成一个不再从其主实例复制内容的只读实例。系统会继续向您收取该实例的费用。在已停用的副本上,您可以重新启用复制、删除副本或将副本提升为独立实例。
如需停用复制功能,请按如下所述操作:
控制台
在 Google Cloud 控制台中,转到 Cloud SQL 实例 页面。
转到“Cloud SQL 实例”
点击某副本实例的名称以选择该实例。
点击按钮栏中的停用复制功能 按钮。
点击确定 。
gcloud
gcloud sql instances patch REPLICA_NAME \
--no-enable-database-replication
REST v1
如需在命令行提示符处执行此 cURL 命令,请使用 gcloud auth print-access-token 命令获取访问令牌,也可以使用 Instances:patch 页面上的 APIs Explorer 发送 REST API 请求。
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
replica-name :副本实例的名称
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id /instances/replica-name
请求 JSON 正文:
{
"settings":
{
"databaseReplicationEnabled": "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/replica-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/replica-name " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/replica-name ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "UPDATE",
"name": "operation-id ",
"targetId": "replica-name ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
REST v1beta4
如需在命令行提示符处执行此 cURL 命令,请使用 gcloud auth print-access-token 命令获取访问令牌,也可以使用 Instances:patch 页面上的 APIs Explorer 发送 REST API 请求。
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
replica-name :副本实例的名称
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/replica-name
请求 JSON 正文:
{
"settings":
{
"databaseReplicationEnabled": "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/replica-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/replica-name " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/replica-name ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "UPDATE",
"name": "operation-id ",
"targetId": "replica-name ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
启用复制功能
如果某副本已有很长时间未复制内容,它将需要较长时间才能与主实例同步。在这种情况下,请删除该副本并创建一个新副本。
如需启用复制功能,请按如下所述操作:
控制台
在 Google Cloud 控制台中,转到 Cloud SQL 实例 页面。
转到“Cloud SQL 实例”
点击某副本实例的名称以选择该实例。
点击启用复制功能 。
点击确定 。
gcloud
gcloud sql instances patch REPLICA_NAME \
--enable-database-replication
REST v1
如需在命令行提示符处执行此 cURL 命令,请使用 gcloud auth print-access-token 命令获取访问令牌,也可以使用 Instances:patch 页面上的 APIs Explorer 发送 REST API 请求。
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
replica-name :副本实例的名称
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id /instances/replica-name
请求 JSON 正文:
{
"settings":
{
"databaseReplicationEnabled": "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/replica-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/replica-name " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id /instances/replica-name ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "UPDATE",
"name": "operation-id ",
"targetId": "replica-name ",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
REST v1beta4
如需在命令行提示符处执行此 cURL 命令,请使用 gcloud auth print-access-token 命令获取访问令牌,也可以使用 Instances:patch 页面上的 APIs Explorer 发送 REST API 请求。
在使用任何请求数据之前,请先进行以下替换:
project-id :项目 ID
replica-name :副本实例的名称
HTTP 方法和网址:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/replica-name
请求 JSON 正文:
{
"settings":
{
"databaseReplicationEnabled": "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/replica-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/replica-name " | Select-Object -Expand Content
您应该收到类似以下内容的 JSON 响应:
响应
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /instances/replica-name ",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-21T22:43:37.981Z",
"operationType": "UPDATE",
"name": "operation-id ",
"targetId": "replica-name ",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id /operations/operation-id ",
"targetProject": "project-id "
}
提升读取副本会停止复制,并会将实例转换为具有读写功能的独立 Cloud SQL 主实例。
提升时,读取副本会自动配置备份,但不会自动配置为高可用性 (HA) 实例。您可以在升级副本后启用高可用性,就像处理任何非副本实例一样。为高可用性配置读取副本的方式与为主实例配置的方式相同。详细了解如何配置实例以实现高可用性 。
在提升只读副本之前,如果主实例仍然可用并为客户端提供服务,则您应执行以下操作:
停止对主实例的所有写入操作。
检查副本的复制状态 。这样做的一种选择是 SQL Server Management Studio (SSMS) 中的 Always On 可用性组信息中心 。
验证副本是否正在复制,然后检查复制延迟时间(例如,根据 seconds_behind_master
指标的报告)。
否则,新提升的实例可能缺少提交到主实例的部分事务。
如需将副本提升为独立实例,请按如下所述操作:
确认已正确配置提升的实例。
具体而言,如果需要,请考虑配置实例以使其具备高可用性 。
检查复制状态
目前,您应该使用 T-SQL 查询或 SSMS 来监控复制状态。详情请参阅以下内容:
问题排查
问题
问题排查
创建时读取副本未开始复制。
日志文件中可能有更具体的错误信息。在 Cloud Logging 中查看日志 以找到实际错误。
无法创建只读副本 - invalidFlagValue 错误
请求中的某个标志无效。它可能是您明确提供的标志,也可能是设置为默认值的标志。首先,检查 max_connections
标志的值是否大于或等于主实例上的值。
如果 max_connections
标志设置正确,请在 Cloud Logging 中检查日志 以找出实际错误。
无法创建只读副本 - 未知错误。
日志文件中可能有更具体的错误信息。在 Cloud Logging 中查看日志 以找到实际错误。如果错误为 set Service Networking service account as
servicenetworking.serviceAgent role on consumer project
,则停用 Service
Networking API
,然后重新启用。此操作会创建继续执行该过程所需的服务账号。
磁盘已满。
主实例磁盘大小可能在副本创建期间变满。
修改主实例 以将其升级为更大的磁盘。
副本实例占用的内存过多。
副本使用临时内存来缓存经常请求的读取操作,这可能会导致其占用的内存多于主实例。重启副本实例以收回临时内存空间。
已停止复制。
已达到存储空间上限,且未启用存储空间自动扩容功能。修改实例 以启用 automatic storage increase
。
复制延迟一直很高。
写入负载过高,副本无法处理。当副本上的 SQL 线程无法与 IO 线程保持同步时,会发生复制延迟。某些类型的查询和工作负载会导致指定架构出现暂时性或永久性的高复制延迟。下面列出了复制延迟的部分常见原因:对副本的查询速度较慢。找到这些查询并进行修复。
由于大量更新堆积在副本上,因此 DELETE ... WHERE field < 50000000
等查询会导致基于行的复制出现复制延迟。
以下是一些可行的解决方案:
修改实例 以增加副本的大小。
减少数据库的负载。
将读取流量发送到读取副本。
将表编入索引。
识别并修复速度缓慢的写入查询。
重新创建副本。
副本创建失败并超时。
主实例上长时间运行的未提交事务可能会导致只读副本创建失败。
停止所有正在运行的查询后重新创建副本。
后续步骤
发送反馈
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可 获得了许可,并且代码示例已根据 Apache 2.0 许可 获得了许可。有关详情,请参阅 Google 开发者网站政策 。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-04-02。
需要向我们提供更多信息?
[[["易于理解","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-04-02。"],[],[]]