База данных 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