pg_basebackup 报错:no pg_hba.conf entry for replication connection

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 认证)

两条规则缺一不可。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注