pg_basebackup 执行报错 “no pg_hba.conf entry for replication connection” 的解决方法——别忘了 replication 虚拟库也需要一条规则
一、问题现象
执行 pg_basebackup 时报错:
[postgres@pg01 tools]$ pg_basebackup -h 10.0.0.101 -U postgres -F p -P -X stream -R -D $PGDATA -l postgresbackup20260616 2026-06-16 10:17:31.017 CST [1577] FATAL: no pg_hba.conf entry for replication connection from host "10.0.0.101", user "postgres" pg_basebackup: error: could not connect to server: FATAL: no pg_hba.conf entry for replication connection from host "10.0.0.101", user "postgres"
明明 pg_hba.conf 里已经配置了 all 规则,为什么还会被拒绝?
二、问题原因
pg_basebackup 走的是 replication 连接,而 replication 并不是一个真实的数据库,它是一个虚拟库。pg_hba.conf 中的 host all all ... 规则只覆盖普通数据库连接,不覆盖 replication 连接。
因此即使配置了:
host all all 0.0.0.0/0 trust
pg_basebackup 依然会因为找不到 replication 规则而拒绝连接。
三、解决方案
在 pg_hba.conf 中添加 replication 规则:
host replication all 0.0.0.0/0 trust
重启 PostgreSQL:
pg_ctl restart
再次执行 pg_basebackup:
[postgres@pg01 backup]$ pg_basebackup -h 10.0.0.101 -U postgres -F p -P -X stream -R -D $PGDATA/backup -l postgresbackup20260616 65502/65502 kB (100%), 1/1 tablespace
备份成功。
四、总结
pg_hba.conf 中至少需要两条规则才能同时支持普通连接和 pg_basebackup 备份:
host all all 0.0.0.0/0 trust host replication all 0.0.0.0/0 trust
- 第一条:允许 普通数据库连接(所有数据库、所有用户、任意 IP,trust 认证)
- 第二条:允许 复制连接(特殊的 replication 虚拟库、所有用户、任意 IP,trust 认证)
两条规则缺一不可。
