Поиск по сайту:

Как сделать резервную копию баз данных PostgreSQL на Ubuntu VPS


Что такое PostgreSQL?

PostgreSQL — это современная система управления базами данных. Он часто используется для хранения и обработки информации, связанной с веб-сайтами и приложениями.

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

Мы будем использовать Ubuntu 12.04 VPS с PostgreSQL 9.1. Большинство современных дистрибутивов и последних версий PostgreSQL работают аналогичным образом.

Как создать резервную копию базы данных PostgreSQL с помощью pg_dump

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

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

pg_dump name_of_database > name_of_backup_file

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

Для реального примера мы можем войти в систему пользователя «postgres» и выполнить команду в базе данных по умолчанию, также называемой «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 существуют те же требования аутентификации, что и для любой другой клиентской программы. Это означает, что вы должны убедиться, что ваши учетные данные для входа в систему действительны для систем, для которых вы пытаетесь выполнить резервное копирование.

Как восстановить дампы данных из pg_dump с помощью PostgreSQL

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

psql empty_database < backup_file

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

Например, мы можем создать новую базу данных с именем «восстановленная_база_данных», а затем перенаправить дамп с именем «база_данных.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» (номер один) или вариант «--одна транзакция»:

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 предоставляет утилиты, необходимые для эффективного резервного копирования важной информации.

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