GCP CloudSQL PostgreSQL中pglogical订阅Down状态修复求助
解决GCP CloudSQL PostgreSQL pglogical订阅Down状态的问题
1. 手动清理发布端残留的复制槽
删除订阅时提示无法自动删除发布端的复制槽,这会导致新订阅无法正常工作,需先手动清理:
- 登录发布端数据库,执行命令查看目标复制槽:
SELECT * FROM pg_replication_slots WHERE slot_name = 'pgl_development_provider_consent_sub'; - 确认槽存在后,执行删除命令:
SELECT pg_drop_replication_slot('pgl_development_provider_consent_sub');注意:删除前确认该槽无其他订阅使用,且已不再需要。
2. 排查发布端逻辑复制启动失败原因
发布端日志显示logical replication launcher退出码1,需开启详细日志定位问题:
- 在GCP CloudSQL控制台进入发布端实例的数据库标志设置,添加/修改以下参数:
log_min_messages = debug1 log_statement = all - 重启数据库实例后,查看最新日志,找到启动失败的具体错误(如权限不足、配置错误等)。
- 核心检查项:
- 确认发布端已安装pglogical扩展:
SELECT * FROM pg_extension WHERE extname = 'pglogical'; - 验证
wal_level设置为logical:SHOW wal_level; - 检查
max_replication_slots、max_wal_senders参数是否满足需求(可在CloudSQL控制台调整)。
- 确认发布端已安装pglogical扩展:
3. 排查订阅端apply进程失败原因
订阅端日志显示pglogical apply进程退出码1,同样需开启详细日志:
- 在订阅端实例的数据库标志中添加相同日志参数,重启后查看详细错误。
- 核心检查项:
- 确认订阅端已安装pglogical扩展。
- 检查复制用户权限:发布端需授予
REPLICATION权限,订阅端需授予目标表的INSERT/UPDATE/DELETE/CREATE权限。 - 验证网络连通性:确保订阅端可通过授权网络或VPC对等访问发布端的5432端口。
4. 重新创建订阅并验证状态
清理残留槽并解决配置问题后,重新创建订阅:
- 删除订阅端现有无效订阅(若存在):
SELECT pglogical.drop_subscription('你的订阅名称'); - 在订阅端创建新订阅,指定正确参数:
SELECT pglogical.create_subscription( subscription_name := '你的订阅名称', provider_dsn := 'host=发布端IP port=5432 dbname=发布端库名 user=复制用户 password=复制用户密码', replication_sets := ARRAY['default'], synchronize_data := true ); - 查看订阅状态:
等待状态从SELECT * FROM pglogical.subscription;initialising切换为replicating,期间可通过日志确认同步进度。
5. 验证同步效果
- 查看订阅详细状态:
SELECT * FROM pglogical.show_subscription_status('你的订阅名称'); - 在发布端插入测试数据,检查订阅端目标表是否同步成功,确认无延迟。
内容的提问来源于stack exchange,提问作者SRJ
相关产品推荐
相关产品推荐

