Удаленный запуск резервного копирования базы данных postgres

Я хотел бы сделать резервную копию своей производственной базы данных до и после запуска миграции базы данных с моего сервера развертывания (не сервера базы данных), у меня есть сервер Postgresql 8.4, расположенный на компьютере CentOS 5. Веб-сайт, обращающийся к базе данных, находится на сервере Windows 2008, на котором выполняется приложение MVC.Net, он проверяет изменения в исходном коде, компилирует проект, выполняет любые изменения БД и затем развертывает их в IIS.

У меня есть сервер БД, настроенный на резервное копирование заданий crontab для ежедневных резервных копий, но я также хочу, чтобы во время процесса развертывания я вызывал резервную копию с сервера развертывания. Из того, что я могу выяснить, нет способа сказать базе данных от клиентского соединения для резервного копирования себя. Если я вызову pg_dump с веб-сервера как часть сценария развертывания, он создаст резервную копию на веб-сервере (не желательно). Я посмотрел на команду COPY, и она, вероятно, не даст мне то, что я хочу. MS SQLServer позволяет вам вызывать команду BACKUP из соединения с БД, которая помещает резервные копии на компьютер базы данных.

Я нашел этот пост о MySQL, и это не поддерживается в MySQL. Postgres это то же самое? Удаленное резервное копирование базы данных MySQL

Каков наилучший способ сделать это? Я думал о создании небольшого приложения, которое устанавливает SSH-соединение с сервером БД, а затем вызывает pg_dump? Это означало бы, что я храню информацию о соединении SSH на сервере, что я действительно предпочел бы не делать, если это возможно.

4 ответа

Решение

Создать базу данных пользователя pgbackup и назначьте ему привилегии только для чтения для всех ваших таблиц базы данных.

Настройте нового пользователя ОС pgbackup на сервере CentOS с /bin/bash ракушка.

Войти как pgbackup и создайте пару ключей аутентификации ssh без ключевой фразы и разрешите этому пользователю войти в систему, используя сгенерированный закрытый ключ:

su - pgbackup
ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N ""
cp -a ~/.ssh/.id_rsa.pub ~/.ssh/authorized_keys

Создать файл ~pgbackup/.bash_profile:

exec pg_dump databasename --file=`date +databasename-%F-%H-%M-%S-%N.sql`

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

Я думаю, что это возможно, если вы создадите триггер, использующий модуль PostgreSQL dblink для подключения к удаленной базе данных из PL/pgSQL.

Я не уверен, что вы имеете в виду, но я думаю, что вы можете просто использовать pg_dump с вашего компьютера Windows:

pg_dump --host=centos-server-name > backup.sql

Вам нужно будет установить версию PostgreSQL для Windows, так что pg_dump.exe будет установлен, но вам не нужно запускать службу PostgreSQL или даже создавать там табличное пространство.

Привет, Майк, ты прав,

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

Все наши серверы являются серверами Linux, мы сделали это с помощью сценария оболочки.

Другие вопросы по тегам