Резервное копирование на уровне файловой системы

Альтернативная стратегия резервного копирования — прямое копирование файлов, которые PostgreSQL использует для хранения данных в базе данных. По умолчанию ADPG размещает файлы базы данных по следующему пути: /pg_data1/adpg14. ADPG создает каталог adpg14 по пути, указанному в параметре Data directory (смотрите Конфигурационные параметры). Значение по умолчанию для этого параметра — /pg_data1.

Для резервного копирования файловой системы вы можете использовать любой удобный для вас метод. Возможные варианты описаны ниже.

Утилита pg_basebackup

Утилита pg_basebackup позволяет создать базовую резервную копию работающего кластера PostgreSQL. Она создает резервные копии, не затрагивая других клиентов базы данных.

Утилита pg_basebackup создает точную копию файлов кластера, автоматически включая и отключая режим резервного копирования. Резервные копии создаются для всего кластера. Невозможно сделать копию отдельных баз данных или объектов базы данных. Для выборочного резервного копирования используйте утилиту pg_dump, как описано в статье SQL-дамп.

Утилита pg_basebackup создает резервные копии через стандартное соединение PostgreSQL, использующее протокол репликации. Соединение должно быть установлено от имени суперпользователя или пользователя с правами запускать репликацию, также pg_hba.conf должен разрешать подключения для репликации.

В следующем примере создается резервная копия сервера, находящегося на хосте 10.92.6.36, и сохраняется в локальном каталоге /usr/local/pgsql/data:

pg_basebackup -h 10.92.6.36 -D /usr/local/pgsql/data

Код, приведенный ниже, создает резервную копию локального сервера с одним tar-файлом для каждого табличного пространства и сохраняет его в каталоге backup2022-12-22:

pg_basebackup -D backup2022-12-22 -Ft

За дополнительной информацией о параметрах утилиты pg_basebackup обратитесь к статье pg_basebackup.

Создание архивного файла

Вы можете создать архивный файл, используя утилиту tar:

tar -cf backup20221215.tar /pg_data1/adpg14

Этот метод имеет два ограничения:

  • Сервер базы данных должен быть выключен. Используйте для этого действие Stop. Также необходимо выключить сервер перед восстановлением данных.

  • Невозможно создать резервную копию и восстановить только определенные таблицы или базы данных из соответствующих файлов или каталогов. Это не работает, потому что информацию, содержащуюся в этих файлах, нельзя использовать без файлов журналов транзакций (pg_xact/*), которые содержат состояние всех транзакций. Файл таблицы можно использовать только с этой информацией. Резервные копии файловой системы должны использоваться только для полного резервного копирования и восстановления всего кластера базы данных.

Создание снепшота

Другой подход к резервному копированию файловой системы заключается в создании снепшота каталога данных, если файловая система поддерживает эту функцию. Типичная процедура состоит в том, чтобы сделать "замороженный" снепшот тома, содержащего базу данных, затем скопировать каталог данных из снепшота на устройство резервного копирования, а затем освободить "замороженный" снепшот. Это подход можно применять во время работы сервера базы данных. Однако резервная копия, созданная таким образом, сохраняет файлы базы данных в состоянии, как если бы сервер базы данных не был выключен должным образом. Когда запустится сервер базы данных с резервными копиями, он будет считать, что предыдущий процесс сервера аварийно завершил работу, и накатит журналы WAL. Поэтому необходимо включать файлы WAL в резервную копию. Вы можете выполнить команду CHECKPOINT перед созданием снепшота, чтобы сократить время восстановления.

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

Использование утилиты rsync

Утилиту rsync также можно использовать для резервного копирования файловой системы. Запустите rsync во время работы сервера базы данных, затем выключите сервер базы данных, чтобы выполнить rsync --checksum (--checksum необходим, потому что rsync различает время только с точностью до секунд). Второй rsync быстрее, чем первый, потому что ему нужно передавать меньше данных. Итоговый результат будет согласован, потому что сервер был остановлен. Этот метод позволяет создавать резервные копии файловой системы с минимальным временем простоя.

ПРИМЕЧАНИЕ
Резервная копия файловой системы обычно больше, чем дамп SQL. Например, pg_dump не нужно выгружать содержимое индексов, а только команды для их пересоздания. Однако резервное копирование файловой системы может быть быстрее.
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней