Postgresql

pg_dump:archiver(db)一種rCH一世在和r(db)archiver (db)與數據庫的連接失敗:致命:使用者“postgres”的對等身份驗證失敗

  • January 9, 2014

我正在嘗試將我的 Postgres 數據庫備份到另一台伺服器,但我一直被拒絕訪問。

我的 pg_hba.conf 文件如下所示:

# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

如果我將 postgres 設置從 PEER 更改為 TRUST,我可以備份程式碼,但網站無法再訪問數據庫(關於 SSL 錯誤,我知道這不是問題)。

當我保持原樣時,PEER,伺服器工作 - php可以訪問數據庫 - 但在嘗試執行備份時出現錯誤:

根> pg_dump -U postgres 表名> test.sql

.pg_dump:

$$ archiver (db) $$與數據庫“tablename”的連接失敗:致命:使用者“postgres”的對等身份驗證失敗。 PHP Apache Web 站點使用適當的使用者名和密碼。

備份腳本如下所示:pg_dump -U postgres tablename > test.sql

我怎樣才能同時滿足網站和備份腳本,以便我可以同時執行它們?

嘗試的整個腳本是這樣的: ssh SERVER “pg_dump -U postgres tablename| gzip -c” > /backup/sqlbackup.sql.gz

取自伺服器故障:ssh remote command-fu

如果您的 PHP Apache 網站使用peer,請保留它,讓我們處理它。

1. 第一種方法:

由於身份驗證是基於對等的,因此您必須使用-h選項指定主機名(通常是 localhost):

ssh server "pg_dump -h localhost -U postgres | gzip -c" >/backup/sqlbackup.sql.gz

這裡的主要問題是系統會提示您輸入 postgres 使用者密碼。這是備份自動化的問題。

您可以參考內容以避免提示輸入密碼。但我會描述:

  1. 創建一個名為的隱藏.pgpass文件$HOME
  2. 執行一個chmod 600 .pgpass
  3. 編輯文件.pgpass並添加這一行:localhost:5432:postgres:postgres:password

2. 第二種方法:

您可以為備份添加特定角色並信任它。

在 Postgres 中創建備份角色:

CREATE ROLE backup WITH LOGIN SUPERUSER PASSWORD 'password'

編輯文件pg_hba.conf,添加角色backuptrust它:

# Database administrative login by Unix domain socket
local   all             postgres                                peer
local   all             backup                                  trust

重新開始postgresql

然後您應該能夠使用以下命令執行備份:

ssh server "pg_dump -U backup postgres | gzip -c" >/backup/sqlbackup.sql.gz

引用自:https://serverfault.com/questions/566176