我正在尝试在 Debian 上的本地无头服务器上为 postgres db 设置自动备份。我有一个脚本:
#!/bin/bash
export PGPASSFILE='/home/mtn/.pgpass'
pg_dumpall -U db_user --verbose 2>/var/log/postgresql/pgdump.log | gzip > /mnt/bulk-data/db_backup/db_bak.gz
有一个.pgpass
文件:
-rw------- 1 mtn mtn 47 Nov 13 10:14 .pgpass
和:
*:*:*:postgres:guest
*:*:*:db_user:guest
还有一份sudo crontab -e
工作:
20 0 * * * /home/mtn/backup.sh >/dev/null 2>&1
pg_hba
:
local all postgres peer
当我尝试运行它时我得到:
pg_dumpall: error: could not connect to database "template1": FATAL: Peer authentication failed for user "db_user"
错误在哪里?
PS 如果我将脚本更改为以 root 身份运行,则一切都正常sudo -u postgres pg_dumpall
。
更新:最终对我有用的是将这一行添加到pg_ident.conf
:
omicron root postgres
然后,在pg_hba.conf
一切事情之前:
local all all ident map=omicron
并将脚本更改为pg_dumpall
以用户身份运行postgres
(仅仅因为db_user
没有所有必要的权限dumpall
)。
答案1
peer
身份验证意味着 postgresql 通过 unix 套接字接受来自指定 unix 系统用户的连接,而无需密码作为指定的数据库用户,因此尝试使用 PGPASS 是没有意义的。有关peer
访问的更多信息,请参见:https://www.postgresql.org/docs/current/auth-peer.html
就您而言,您的pg_hba.conf
仅允许系统用户postgres
以数据库用户身份连接所有数据库。我在您的 中看postgres
不到您的,因此无法连接。意味着您切换到系统用户并以该用户身份运行,以数据库用户身份连接。这就是它起作用的原因。db_user
pg_hba.conf
sudo -u postgres pg_dumpall
postgres
pg_dumpall
postgres