web-dev-qa-db-ja.com

pg_dump:[archiver(db)]データベースへの接続に失敗しました:FATAL:ユーザー "postgres"のピア認証に失敗しました

Postgres DBを別のサーバーにバックアップしようとしていますが、アクセスが拒否され続けます。

私の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に変更すると、コードをバックアップできますが、Webサイトはデータベースにアクセスできなくなります(SSLエラーに関する問題ですが、問題ではありません)。

そのままにしておくと、サーバーは動作します-phpはdbにアクセスできます-しかし、バックアップを実行しようとするとエラーが発生します。

root> pg_dump -U postgresテーブル名> test.sql

.pg_dump:[archiver(db)]データベース "tablename"への接続に失敗しました:FATAL:ユーザー "postgres"のピア認証に失敗しました。

PHP Apache Webサイトでは、適切なユーザー名とパスワードを使用しています。

バックアップスクリプトは次のようになります。pg_dump -U postgres tablename> test.sql

webサイトとバックアップスクリプトの両方を満たし、両方を実行するにはどうすればよいですか?

試行されたスクリプト全体は次のとおりです:ssh SERVER "pg_dump -U postgres tablename | gzip -c"> /backup/sqlbackup.sql.gz

サーバー障害から取得: ssh remote command-f

6
Drace

PHP Apache Webサイトがpeerで動作する場合、これを保持して対処しましょう。

1。最初の方法:

認証はピアベースであるため、-hオプションを使用してホスト名(通常はlocalhost)を指定する必要があります。

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

ここでの主な問題は、postgresユーザーパスワードの入力を求められることです。バックアップ自動化の問題です。

this を参照して、パスワードの入力を求められないようにすることができます。しかし、私は説明します:

  1. .pgpass$HOMEという名前の隠しファイルを作成します
  2. chmod 600 .pgpassを実行する
  3. ファイル.pgpassを編集して、次の行を追加します:localhost:5432:postgres:postgres:password

2。 2番目の方法:

バックアップに特定の役割を追加して、それを信頼することができます。

Postgresでバックアップロールを作成します。

CREATE ROLE backup WITH LOGIN SUPERUSER PASSWORD 'password'

ファイルpg_hba.confを編集し、ロールbackupおよびtrust itを追加します。

# 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
10
krisFR