2015-04-15 1 views
14

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

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

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

+0

[непроверенных] (1) Настройка Netcat слушателя ** на локальном компьютере ** (с использованием номер_порта, которое не используется или заблокированы), например, 'Netcat -l -p 1234> thefile & '. (2) ** с удаленной машины **, do: 'pg_dump ... | netcat your.local.ip 1234' – wildplasser

ответ

31

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

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

Редактировать: исправлена ​​опечатка.

+0

Это намного проще, чем мой netcat hack. – wildplasser

+0

Огромное спасибо, что это разобрало мою проблему, выполнил ли я работу, которой я отсутствовал. \ Is all –

2

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

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

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

Для конфигурации соединения (sslmode) см. Также the supported environment variables.

+0

Было бы полезно показать всю команду здесь, так как я не могу понять, как вы также можете восстановить целевую машину таким образом (конечно, вы можете сначала сбросить, а затем восстановить, но это не соответствует вопросу) –

+0

Извините, у меня нет простого примера команды, моя настройка довольно развита с конфигурационными файлами для ssh (для альтернативы ssh) и для psql с именами служб для подключения. Командой является проблема? Вам просто нужно добавить имя хоста в командную строку. Я бы предпочел, чтобы проблема/задача - установка TLS на сервере! Как только вы это сделали, это просто простая командная строка psql и pg_dump с именем хоста, отличным от localhost. –

0

Вы можете попробовать сбросить часть таблицы в файл в локальной машине, как это (предположим, что ваша локальная машина установлена ​​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;" 

И вы можете импортировать экспортированный файл в другой БД позже как это:

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