База данных pg_dump postgres с удаленного сервера

Я пытаюсь pg_dump базу данных SQL на удаленном сервере в нашей DMZ. Есть 2 проблемы.

1) на удаленном сервере осталось много места, поэтому обычная команда для локального резервного копирования базы данных pg_dump -C database > sqldatabase.sql.bak не будет работать из-за проблем с пространством.

2) Я также не могу запустить другую версию команды pg_dump для дампа базы данных с удаленного сервера на локальный сервер, используя:

pg_dump -C -h remotehost -U remoteuser db_name | psql localhost -U localuser db_name

поскольку сервер находится в нашей DMZ, а порт 5432 заблокирован. Я хочу посмотреть, можно ли pg_dump базы данных и немедленно сохранить его (ssh или какую-либо другую) в качестве файла на удаленном сервере. Я пытался: pg_dump -C testdb | ssh [email protected] | >/home/admin/testdb.sql.bak pg_dump -C testdb | ssh [email protected] | >/home/admin/testdb.sql.bak

Кто-нибудь знает, возможно ли то, что я пытаюсь достичь?

Ответ 1

Вы можете подключиться с помощью ssh к удаленному серверу, подключиться к вызову pg_dump и отправить выход обратно на стандартный вывод локального компьютера.

ssh [email protected]_machine "pg_dump -U dbuser -h localhost -C --column-inserts" \
 >> backup_file_on_your_local_machine.sql

Изменение: исправлена опечатка.

Ответ 2

Вы можете попытаться сбросить часть таблицы в файл на вашем локальном компьютере (предположим, что на вашем локальном компьютере установлен psql):

psql -h ${db_host} -p 5432 -U ${db_user} -d ${db_name} \
-c "\copy (SELECT * FROM my_table LIMIT 10000) to 'some_local_file.csv' csv;"

И вы можете импортировать экспортированный csv в другой db позже следующим образом:

COPY my_table FROM '/path/to/some_local_file.csv' WITH (FORMAT csv);

Ответ 3

Было упомянуто одно возможное решение - труба через ssh.

Вы также можете заставить свой сервер DB прослушивать общедоступный адрес inet, добавить запись hostssl для своей резервной машины в pg_hba.conf, возможно настроить сертификат клиента для обеспечения безопасности, а затем просто запустить дамп на клиентской/резервной машине с помощью pg_dump -h dbserver.example.com...

Это проще для автоматических резервных копий.

Для конфигурации соединения (sslmode) см. Также поддерживаемые переменные среды.

Ответ 4

Давайте создадим резервную копию из удаленной базы данных postgresql, используя pg_dump:

pg_dump -h [host address] -Fc -o -U [database user] <database name> > [dump file]

позже он может быть восстановлен на том же удаленном сервере, используя:

sudo -u postgres pg_restore -C mydb_backup.dump

Пример:

pg_dump -h 67.8.78.10 -Fc -o -U myuser mydb > mydb_backup.dump

полный (все базы данных и объекты)

pg_dumpall -U myuser -h 67.8.78.10 --clean --file=mydb_backup.dump

восстановить из pg_dumpall --clean:

psql -f mydb_backup.dump postgres #it doesn't matter which db you select here

Скопировано из: https://codepad.co/snippet/73eKCuLx