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
PHP Apache Webサイトがpeer
で動作する場合、これを保持して対処しましょう。
1。最初の方法:
認証はピアベースであるため、-h
オプションを使用してホスト名(通常はlocalhost)を指定する必要があります。
ssh server "pg_dump -h localhost -U postgres | gzip -c" >/backup/sqlbackup.sql.gz
ここでの主な問題は、postgresユーザーパスワードの入力を求められることです。バックアップ自動化の問題です。
this を参照して、パスワードの入力を求められないようにすることができます。しかし、私は説明します:
.pgpass
に$HOME
という名前の隠しファイルを作成しますchmod 600 .pgpass
を実行する.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