Кто-нибудь знает хороший способ резервного копирования баз данных postgres? - PullRequest
7 голосов
/ 03 августа 2009

У меня есть скрипт, который будет производить ежедневные ротационные резервные копии для mysql, но я не могу найти ничего похожего для postgres. Я также обнаружил, что у него есть возможность оперативного резервного копирования, что должно пригодиться, так как это производственный сайт.

Кто-нибудь знает программу / скрипт, которая мне поможет, или даже способ сделать это?

Спасибо.

Ответы [ 8 ]

18 голосов
/ 03 августа 2009

Одним из способов является использование pg_dump для генерации плоского дампа sql, который вы можете распаковать или как угодно. Это, безусловно, самый простой вариант, поскольку результаты могут быть переданы обратно в psql для повторной загрузки базы данных, и, поскольку она также может экспортироваться в виде простого текста, вы можете просматривать или редактировать данные перед восстановлением, если это необходимо.

Следующий метод - временно закрыть вашу базу данных (или, если ваша файловая система поддерживает атомарные снимки, теоретически это может работать) и сделать резервную копию вашего каталога PostgreSQL data.

На этой странице с сайта PostgreSQL также объясняется, как выполнять резервное копирование в онлайн-хранилище и восстановление на определенный момент времени, что, безусловно, является наиболее сложным в настройке, но также и оптимальным методом. Идея состоит в том, что вы выполняете базовое резервное копирование (которое вы можете делать каждый день, пару дней или неделю), запустив какой-то специальный SQL (pg_start_backup и pg_stop_backup) и сделаете (на уровне файловой системы) копию каталога базы данных. , База данных не отключается в течение этого времени, и все по-прежнему работает как обычно. С этого момента база данных генерирует журнал записи вперед (WAL) любых изменений, которые затем могут быть перенесены (автоматически базой данных) в любое место. Для восстановления вы берете базовую резервную копию, загружаете ее в другой экземпляр базы данных, а затем просто воспроизводите все файлы WAL. Таким образом, вы также можете выполнить восстановление на определенный момент времени, не воспроизводя все журналы.

4 голосов
/ 30 ноября 2012

Здесь скрипты, которые вы можете использовать для резервного копирования postgresql по crontab

http://ithelpblog.com/os/linux/debian/best-way-to-backup-postgresql-database/

С уважением, Kevin

3 голосов
/ 23 августа 2009

Для автоматического резервного копирования как MySQL , так и Postrgres проверьте astrails-safe на github (или просто "gem install astrails-safe --source=http://gems.github.com"). Он использует mysqldump для резервного копирования MySQL и pg_dump для резервного копирования Postgres. Он также знает, как сделать резервную копию простых файлов с помощью tar и зашифровать все с помощью GnuPG и загрузить на S3 или на любой сервер Unix с SFTP.

2 голосов
/ 17 сентября 2010

Поскольку вы указали базы данных, pg_dumpall будет для вас гораздо полезнее. Он сбрасывает все базы данных и пользователей в файл sql вместо одного.

2 голосов
/ 03 августа 2009

Обычно способ сделать резервные копии - это использовать pg_dump.

Вы не должны «копировать файлы из каталога postgresql, как в mysql», - скорее всего, вы не сможете их использовать (эти файлы зависят от архитектуры, операционной системы и параметров компиляции).

Если pg_dump не доказано, что недостаточно, это то, что вы должны использовать. После того, как вы окажетесь в ситуации, когда pg_dump не может быть использован - вы должны спросить себя: почему его нельзя использовать и что вы можете сделать, чтобы использовать его снова:)

При использовании pg_dump вы можете выбрать простой дамп файла SQL (-F p) или пользовательский формат (-F c). Дамп SQL проще модифицировать / изменить, но пользовательский формат намного мощнее и (с 8.4) быстрее загружается, потому что вы можете загружать его во многих параллельных рабочих местах вместо последовательных.

1 голос
/ 23 июля 2012

Я только что наткнулся на эту маленькую аккуратную утилиту:

http://code.google.com/p/pg-rman/

Из документации это выглядит многообещающе, но мне еще предстоит попробовать.

1 голос
/ 03 августа 2009

Вы также можете вывести свою базу данных PostgreSQL, используя phpPgAdmin или pgAdmin III .

0 голосов
/ 27 февраля 2014

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

Для резервного копирования вашей базы данных

pg_dump --format=c olddb_name > db_dump_file.dump

Чтобы восстановить эту резервную копию

pg_restore -v -d newdb_name db_dump_file.dump

Подробнее о pg_dump и pg_restore

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...