本页面介绍如何在从外部服务器复制到 Cloud SQL 时设置并使用代管式数据导入。
您必须完成本页面中的所有步骤。完成后,您可以像管理任何其他 Cloud SQL 实例一样管理和监控源表示形式实例。
准备工作
在开始之前,请完成以下步骤:
验证复制设置
设置完成后,请确保 Cloud SQL 副本可以从外部服务器进行复制。
以下外部同步设置必须正确无误。
- Cloud SQL 副本和外部服务器之间的连接
- 复制用户权限
- 版本兼容性
- Cloud SQL 副本当前没有执行复制操作
如需验证这些设置,请打开 Cloud Shell 终端并输入以下命令:
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings
示例
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
这些调用返回一个 sql#externalSyncSettingErrorList
类型的列表。
如果列表为空,则表示没有错误。无错误的响应如下所示:
{ "kind": "sql#externalSyncSettingErrorList" }
属性 | 说明 |
---|---|
SYNC_MODE | 确保在设置复制后可以使 Cloud SQL 副本和外部服务器保持同步。同步模式包括 EXTERNAL_SYNC_MODE_UNSPECIFIED 、ONLINE 和 OFFLINE 。 |
SYNC_PARALLEL_LEVEL | 验证用于控制数据库表中数据转移速度的设置。您可以使用以下值:
注意:此参数的默认值为 |
PROJECT_ID | 您的 Google Cloud 项目的 ID。 |
REPLICA_INSTANCE_ID | Cloud SQL 副本的 ID。 |
在外部服务器上开始复制
在验证您是否可以从外部服务器执行复制后,可以开始复制。对初始导入过程执行复制的速度高达每小时 500 GB。不过,此速度可能会因机器层级、数据磁盘大小、网络吞吐量和数据库性质而异。
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"skipVerification": "SKIP_VERIFICATION",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/startExternalSync
示例
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
属性 | 说明 |
---|---|
SYNC_MODE | 确保在设置复制后可以使 Cloud SQL 副本和外部服务器保持同步。 |
SKIP_VERIFICATION | 在同步数据之前是否跳过内置验证步骤。仅当您已验证复制设置的情况下,才建议使用此参数。 |
SYNC_PARALLEL_LEVEL | 提供一项设置,用于控制从数据库表传输数据的速度。您可以使用以下值:
注意:此参数的默认值为 |
PROJECT_ID | 您的 Google Cloud 项目的 ID。 |
REPLICA_INSTANCE_ID | Cloud SQL 副本的 ID。 |
监控迁移
从外部服务器开始复制后,您需要监控复制。如需了解详情,请参阅监控复制功能。 然后,您可以完成迁移。
问题排查
请考虑以下问题排查方案:
问题 | 问题排查 |
---|---|
创建时读取副本未开始复制。 | 日志文件中可能有更具体的错误信息。在 Cloud Logging 中查看日志以找到实际错误。 |
无法创建只读副本 - invalidFlagValue 错误 | 请求中的某个标志无效。它可能是您明确提供的标志,也可能是设置为默认值的标志。 首先,检查 如果 |
无法创建只读副本 - 未知错误。 | 日志文件中可能有更具体的错误信息。在 Cloud Logging 中查看日志以找到实际错误。 如果错误为 |
磁盘已满。 | 主实例磁盘大小可能在副本创建期间变满。 修改主实例以将其升级为更大的磁盘。 |
磁盘空间显著增加。 | 未主动用于跟踪数据的槽会使 PostgreSQL 无限期地保留在 WAL 分段中,从而导致磁盘空间无限增大。如果您使用 Cloud SQL 中的逻辑复制和解码功能,则系统会自动创建和丢弃复制槽。可通过查询 pg_replication_slots 系统视图并过滤 active 列检测到未使用的复制槽。您可以使用 pg_drop_replication_slot 命令丢弃未使用的槽以移除 WAL 分段。
|
副本实例占用的内存过多。 | 副本使用临时内存来缓存经常请求的读取操作,这可能会导致其占用的内存多于主实例。 重启副本实例以收回临时内存空间。 |
已停止复制。 | 已达到存储空间上限,且未启用存储空间自动扩容功能。 修改实例以启用 |
复制延迟一直很高。 | 写入负载过高,副本无法处理。当副本上的 SQL 线程无法与 IO 线程保持同步时,会发生复制延迟。某些类型的查询和工作负载会导致指定架构出现暂时性或永久性的高复制延迟。下面列出了复制延迟的部分常见原因:
以下是一些可行的解决方案:
|
在 PostgreSQL 9.6 中重建索引时出错。 | 您会收到来自 PostgreSQL 的错误,告知您需要重新构建特定索引。此操作只能在主实例上完成。如果您创建新的副本实例,则很快就会再次遇到同样的错误。在低于 10 的 PostgreSQL 版本中,哈希索引不会传播到副本。 如果必须使用哈希索引,请升级到 PostgreSQL 10+。否则,如果您还想使用副本,请不要在 PostgreSQL 9.6 中使用哈希索引。 |
主实例上的查询始终运行。 | 创建副本后,查询 SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' 应在主实例上连续运行。 |
副本创建失败并超时。 | 主实例上长时间运行的未提交事务可能会导致只读副本创建失败。
停止所有正在运行的查询后重新创建副本。 |
如果主实例和副本具有不同的 vCPU 大小,则可能存在查询性能问题,因为查询优化器会考虑 vCPU 大小。 |
如需解决此问题,请完成以下步骤:
如果是特定查询,请修改此查询。例如,您可以更改联接的顺序,以查看是否可以获得更好的性能。 |
查看复制日志
当您验证复制设置时,系统会生成日志。
您可以按照以下步骤查看这些日志:
转到 Google Cloud 控制台中的“日志查看器”。
- 从实例下拉列表中选择 Cloud SQL 副本。
- 选择
replication-setup.log
日志文件。
如果 Cloud SQL 副本无法连接到外部服务器,请确认以下内容:
- 外部服务器上的任何防火墙已配置为允许来自 Cloud SQL 副本的传出 IP 地址的连接。
- 您的 SSL/TLS 配置正确无误。
- 您的复制用户、主机和密码正确无误。
后续步骤
- 了解如何更新实例。
- 了解如何管理副本。
- 了解如何监控实例。
- 了解如何提升 Cloud SQL 副本。