postgres-replication-broken

PostgreSQL 主从复制中断的定位与恢复

现象

备库不再接收/回放 WAL,pg_stat_replication 在主机上为空,备库 pg_last_wal_receive_lsn 停止增长。日志出现 could not receive data from WAL stream 或 timeline 错误。

快速定位

主机:

SELECT * FROM pg_stat_replication;
SELECT slot_name, active, restart_lsn FROM pg_replication_slots;

备库:

SELECT pg_last_wal_receive_lsn(), pg_last_wal_replay_lsn(),
       now() - pg_last_xact_replay_timestamp();
SHOW primary_conninfo;
journalctl -u postgresql --since '30 min ago'
df -h

常见根因

  1. 网络中断、主库/备库防火墙或端口变化。
  2. 复制账号密码/pg_hba.conf 变更。
  3. 主库 WAL 已被清理,备库需要的段不存在。
  4. 时间线切换(主备切换)后备库配置未更新。
  5. 备库磁盘满或恢复冲突。
  6. 复制槽被删除或失效。

修复

相关命令