概述逻辑复制依赖主库变更日志在订阅端回放。数据漂移或唯一约束冲突会导致订阅应用失败。通过暂停订阅、比对校验与对齐数据,然后恢复并回放,可保证一致性与可审计。关键实践与参数参数: `wal_level=logical` `max_replication_slots` `max_wal_senders`发布/订阅: 选择性表复制,控制 `copy_data`冲突检测: 通过 `pg_stat_subscription` 与日志识别错误恢复流程: 暂停 → 对齐数据 → 刷新发布 → 恢复订阅示例/配置/实现ALTER SYSTEM SET wal_level = 'logical'; SELECT pg_reload_conf(); CREATE PUBLICATION pub_orders FOR TABLE orders; CREATE SUBSCRIPTION sub_orders CONNECTION 'host=primary port=5432 dbname=shop user=replicator password=secret' PUBLICATION pub_orders WITH (copy_data = true); -- 模拟冲突: 在订阅端预先存在主键重复行 INSERT INTO orders(id, amount) VALUES (1001, 12.3); -- 主库写入同主键但不同数据 INSERT INTO orders(id, amount) VALUES (1001, 15.0); -- 检测与暂停 SELECT subname, latest_end_time, last_msg_send_time, last_msg_receipt_time FROM pg_stat_subscription; ALTER SUBSCRIPTION sub_orders DISABLE; -- 比对与对齐(示例: 以主库为准) DELETE FROM orders WHERE id = 1001; -- 清理冲突数据 -- 或重新同步目标表数据 ALTER SUBSCRIPTION sub_orders REFRESH PUBLICATION WITH (copy_data = true); -- 恢复并回放 ALTER SUBSCRIPTION sub_orders ENABLE; 验证订阅状态: `pg_stat_subscription` 恢复正常,滞后时间下降数据一致: 比对主从关键字段哈希或计数一致回放完成: 新写入在订阅端可见且无冲突审计记录: 保留暂停、比对与恢复操作日志注意事项DDL不复制,需保持两端Schema一致大批量对齐需在维护窗口执行并监控资源复制用户权限最小化,槽位需回收故障演练定期执行,完善SOP与回滚策略

发表评论 取消回复