Я пытаюсь создать резервную копию своей базы данных 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: [архиватор (db)] не удалось установить соединение с базой данных «tablename»: FATAL: не удалось выполнить аутентификацию однорангового узла для пользователя «postgres».
Веб-сайт PHP Apache использует соответствующие имя пользователя и пароль.
Скрипт резервного копирования выглядит так: pg_dump -U postgres tablename> test.sql
как мне удовлетворить и веб-сайт, и сценарий резервного копирования, чтобы я мог запускать и то, и другое?
Попытка выполнить весь сценарий выглядит так: ssh SERVER "pg_dump -U postgres tablename | gzip -c"> /backup/sqlbackup.sql.gz
взято из Server Fault: ssh удаленная команда-фу
Если ваш веб-сайт PHP Apache работает с peer
, сохраните это, и давайте разберемся с этим.
1. Первый способ:
Поскольку аутентификация является одноранговой, вы должны указать имя хоста (обычно localhost), используя -h
вариант:
ssh server "pg_dump -h localhost -U postgres | gzip -c" >/backup/sqlbackup.sql.gz
Основная проблема здесь в том, что вам будет предложено ввести пароль пользователя postgres. Это проблема автоматизации резервного копирования.
Вы можете обратиться к этот чтобы не запрашивали пароль. Но я опишу:
.pgpass
в $HOME
chmod 600 .pgpass
.pgpass
и добавьте эту строку: localhost:5432:postgres:postgres:password
2. Второй способ:
Вы можете добавить определенную роль для резервного копирования и доверять ей.
Создайте роль резервного копирования в Postgres:
CREATE ROLE backup WITH LOGIN SUPERUSER PASSWORD 'password'
Редактировать файл pg_hba.conf
, добавить роль backup
и trust
Это :
# 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