我正在尝试在 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
)。
peer
身份验证意味着 postgresql 接受来自指定 unix 系统用户的 unix socket 连接,而没有指定数据库用户的密码,因此尝试使用 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
。这就是它起作用的原因。