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

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


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

Мы предполагаем, что у вас уже есть работающая установка системы баз данных PostgreSQL. Если нет, прочитайте наши следующие статьи, чтобы установить PostgreSQL в свой дистрибутив Linux.

Давайте начнем…

Резервное копирование одной базы данных PostgreSQL

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

Чтобы создать резервную копию базы данных PostgreSQL, начните с входа на сервер базы данных, затем переключитесь на учетную запись пользователя Postgres и запустите pg_dump следующим образом. (замените tecmintdb именем базы данных, резервную копию которой вы хотите создать). По умолчанию выходной формат представляет собой простой текстовый файл сценария SQL.

pg_dump tecmintdb > tecmintdb.sql

pg_dump поддерживает и другие форматы вывода. Вы можете указать выходной формат с помощью параметра -F, где c означает файл архива пользовательского формата, d означает архив формата каталога, а t означает архивный файл формата tar: все форматы подходят для ввода в pg_restore.

Например:

pg_dump -F c tecmintdb > tecmintdb.dump
OR
pg_dump -F t tecmintdb > tecmintdb.tar

Чтобы выгрузить выходные данные в формате вывода каталога, используйте флаг -f (который используется для указания выходного файла), чтобы указать целевой каталог вместо файла. Каталог, который будет создан pg_dump, не должен существовать.

pg_dump -F d tecmintdb -f tecmintdumpdir	

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

pg_dumpall > all_pg_dbs.sql

Вы можете восстановить дамп, используя psql, как показано.

psql -f all_pg_dbs.sql postgres

Восстановление базы данных PostgreSQL

Чтобы восстановить базу данных PostgreSQL, вы можете использовать утилиты psql или pg_restore. psql используется для восстановления текстовых файлов, созданных pg_dump тогда как pg_restore используется для восстановления базы данных PostgreSQL из архива, созданного pg_dump< в одном из форматов, отличных от обычного текста (пользовательский, tar или каталог).

Вот пример того, как восстановить дамп обычного текстового файла:

psql tecmintdb < tecmintdb.sql

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

pg_restore -d tecmintdb tecmintdb.dump
OR
pg_restore -d tecmintdb tecmintdb.tar
OR
pg_restore -d tecmintdb tecmintdumpdir	

Резервная копия сжатой базы данных PostgreSQL

Если база данных, для которой вы создаете резервную копию, велика и вы хотите создать выходной файл достаточно меньшего размера, вы можете запустить сжатый дамп, в котором вам придется фильтровать выходные данные pg_dump с помощью инструмента сжатия, такого как gzip. или любой ваш любимый:

pg_dump tecmintdb | gzip > tecmintdb.gz

Если база данных очень велика, вы можете выполнить дамп параллельно, одновременно выгружая таблицы number_of_jobs, используя флаг -j, как показано.

pg_dump -F d -j 5 -f tecmintdumpdir

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

Резервное копирование удаленных баз данных PostgreSQL

pg_dump — это обычный клиентский инструмент PostgreSQL, поддерживающий операции на удаленных серверах баз данных. Чтобы указать удаленный сервер базы данных, к которому должен обращаться pg_dump, используйте параметры командной строки -h, чтобы указать удаленный хост , а -p задает удаленный хост. порт, который прослушивает сервер базы данных. Кроме того, используйте флаг -U, чтобы указать имя роли базы данных для подключения.

Не забудьте заменить 10.10.20.10, 5432 и tecmintdb на IP-адрес или имя удаленного хоста, порт базы данных и имя базы данных соответственно.

pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

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

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

pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

Автоматическое резервное копирование базы данных PostgreSQL с использованием задания Cron

Вы можете выполнять резервное копирование через регулярные промежутки времени, используя задания cron. Задания Cron — это широко используемый способ планирования выполнения различных типов задач на сервере.

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

mkdir -p /srv/backups/databases

Затем выполните следующую команду, чтобы отредактировать crontab и добавить новое задание cron.

crontab -e

Скопируйте и вставьте следующую строку в конец crontab. Вы можете использовать любой из форматов дампа, описанных выше.

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

Сохраните файл и выйдите.

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

Дополнительную информацию о том, как планировать задания cron, см. в разделе «Как создавать задания Cron и управлять ими в Linux».

На этом всё! Хорошая идея сделать резервное копирование данных частью вашей процедуры управления базой данных. Чтобы связаться с нами по любым вопросам или комментариям, используйте форму обратной связи ниже. Дополнительную информацию смотрите на справочных страницах pg_dump и pg_restore.