pg_dump: [archiver (db)] сбой подключения к базе данных: FATAL: не удалось выполнить аутентификацию однорангового узла для пользователя postgres

Я пытаюсь создать резервную копию моей БД 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 может получить доступ к базе данных, но я получаю сообщение об ошибке при попытке запустить резервную копию:

root> pg_dump -U postgres tablename> test.sql

.pg_dump: [архиватор (db)] не удалось установить соединение с базой данных «tablename»: FATAL: не удалось выполнить аутентификацию однорангового узла для пользователя «postgres».

Веб-сайт PHP Apache использует соответствующие имя пользователя и пароль.

Сценарий резервного копирования выглядит следующим образом: pg_dump -U postgres tablename> test.sql

как я могу удовлетворить и веб-сайт, и сценарий резервного копирования, чтобы я мог запустить оба?

Попытка всего сценария выглядит так: {{ 1}} ssh SERVER "pg_dump -U postgres tablename | gzip -c"> /backup/sqlbackup.sql.gz

получено из сбоя сервера: ssh remote command-fu

6
задан 13 April 2017 в 15:14
1 ответ

Если ваш веб-сайт PHP Apache работает с одноранговым узлом ], оставьте это, и давайте разберемся с этим.

1. Первый метод:

Поскольку аутентификация основана на одноранговых узлах, вы должны указать имя хоста (обычно localhost) с помощью параметра -h :

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 : пароль

2. Второй способ:

Вы можете добавить определенную роль для резервного копирования и доверять ей.

Создайте роль резервного копирования в Postgres:

CREATE ROLE backup WITH LOGIN SUPERUSER PASSWORD 'password'

Отредактируйте файл pg_hba.conf , добавьте роль backup и доверяют ему:

# 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
ответ дан 3 December 2019 в 00:16

Теги

Похожие вопросы