Создание резервной копии данных PostgreSQL на сервере Ubuntu

Что такое PostgreSQL?

PostgreSQL – это современная открытая система управления базами данных (или СУБД), которая часто используется для хранения информации, необходимой для работы сайтов и веб-приложений.

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

Для выполнения руководства необходим виртуальный выделенный сервер Ubuntu 12.04 и PostgreSQL 9.1 (руководство также действительно для более новых версий СУБД).

Резервное копирование при помощи pg_dump

PostgreSQL предоставляет утилиту pg_dump, которая позволяет сделать дамп базы PostgreSQL в целях резервного копирования.

Утилита pg_dump запускается из командной строки Linux. Ее базовый синтаксис выглядит так:

pg_dump name_of_database > name_of_backup_file

Для запуска команды нужно иметь право на чтение всей информации БД, потому ее, как правило, следует запускать как суперпользователь (англ. superuser).

Для примера можно войти как пользователь postgres (стандартный пользователь БД PostgreSQL) и выполнить команду на стандартную БД, которая тоже зовется postgres:

sudo su - postgres
pg_dump postgres > postgres_db.bak

Данная команда является клиентской программой PostgreSQL, потому ее можно запускать на удаленной системе (если она имеет соответствующие права на БД).

Чтобы создать резервную копию данных удаленной системы, внесите в команду флаг -h (который указывает на удаленный хост) и -p (указывает на удаленный порт):

pg_dump -h remote_host -p remote_port name_of_database > name_of_backup_file

Кроме того, можно указать другого пользователя при помощи опции -U. Синтаксис будет иметь такой вид:

pg_dump -U user_name -h remote_host -p remote_port name_of_database > name_of_backup_file

Помните: как и любая другая клиентская команда, pg_dump имеет определенные требования аутентификации. Это значит, что для создания резервной копии системы необходимо иметь валидные учетные данные этой системы.

Восстановление дампа PostgreSQL с помощью pg_dump

Чтобы восстановить дамп данных, созданный при помощи pg_dump, можно  перенаправить этот файл в стандартный ввод psql:

psql empty_database < backup_file

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

Для примера можно создать новую БД по имени restored_database, а затем перенаправить дамп по имени database.bak; для этого нужно выполнить:

createdb -T template0 restored_database
psql restored_database < database.bak

При этом будет создана пустая БД на основе template0.

Для корректного восстановления дампа можно выполнить еще одно действие – воссоздать любого пользователя, который владеет или имеет привилегии на объекты в базе данных.

К примеру, если БД принадлежит пользователю test_user, то перед импортированием нужно создать его в восстанавливаемой системе:

createuser test_user
psql restored_database < database.bak

Устранение ошибок восстановления

По умолчанию СУБД PostgreSQL продолжит восстанавливать данные, даже столкнувшись с ошибкой.

Но во многих случаях это поведение нежелательно, поскольку позже будет очень непросто обнаружить ошибку и восстановить прежний вид БД.

Чтобы система PostgreSQL прерывала восстановление в случае возникновения ошибки, наберите:

psql --set ON_ERROR_STOP=on restored_database < backup_file

Эта команда остановит операцию восстановления PostgreSQL в случае ошибки.

Конечно, в системе останется поврежденная БД, которая была лишь частично восстановлена; тем не менее, такой подход позволяет устранять ошибки по мере их поступления, а не после полного восстановления БД (что может оказаться достаточно непростой задачей).

Во многих ситуациях отличным решением может оказаться использование опции -1 (цифра один) или –single-transaction:

psql -1 restored_database < backup_file

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

Разница между этой опцией и настройкой ON_ERROR_STOP заключается в том, что она либо полностью завершит процесс, либо же не выполнит совсем ничего.

Этот процесс может оказаться очень затратным для восстановления больших БД, но во многих случаях отсутствие в системе поврежденной БД стоит израсходованных ресурсов.

Резервное копирование и восстановление всех БД PostgreSQL

Утилита pg_dumpall позволяет создать резервную копию абсолютно всех данных.

Синтаксис этой команды очень похож на синтаксис pg_dump; но в данном случае не нужно указывать БД, поскольку команда скопирует все доступные базы данных:

pg_dumpall > backup_file

Чтобы восстановить эти баз данных, нужно передать файл psql с БД по умолчанию:

psql -f backup_file postgres

Итоги

Резервная копия данных – неотъемлемый компонент плана хранения данных любого вида. К счастью, PostgreSQL предоставляет удобные утилиты, позволяющие создавать эффективные резервные копии важной информации.

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

Tags: , , , , , , ,

Добавить комментарий