Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

Обзор gpbackup и gprestore

Павел Семёнов

gpbackup и gprestore — это утилиты командной строки для централизованного резервного копирования и восстановления баз данных Greengage DB. Они распространяются отдельно от основной СУБД, используют собственное версионирование и совместимы с различными версиями Greengage DB. Инструкции по установке и началу работы с утилитами приведены в разделе Установка gpbackup и gprestore.

gpbackup создает логические бэкапы базы данных, а gprestore восстанавливает их в тот же или другой кластер Greengage DB. Совместно эти утилиты формируют надежную платформу для защиты от потери данных и восстановления после сбоев в распределенных средах.

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

Процесс резервного копирования и восстановления

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

Процесс резервного копирования

Вызов gpbackup с указанием имени базы данных и каталога инициирует создание бэкапа в этом каталоге:

$ gpbackup --dbname marketplace --backup-dir /home/gpadmin/backups

При запуске gpbackup подключается к указанной базе данных и собирает метаданные объектов и информацию о распределении. Затем мастер запускает параллельные сессии резервного копирования данных на сегмент-хостах. Каждый сегмент записывает свою часть данных таблиц в файлы бэкапа в локальной файловой системе. Такая распределенная модель выполнения позволяет масштабировать процесс резервного копирования с ростом числа сегментов и снижает нагрузку на мастер.

Во время резервного копирования каждая таблица, участвующая в процессе, блокируется с типом блокировки ACCESS SHARE. Это запрещает изменения схемы (например, ALTER TABLE), но допускает чтение и запись в другие таблицы, так что база данных остается доступной в процессе.

ПРИМЕЧАНИЕ

Если таблица уже заблокирована блокировкой EXCLUSIVE, gpbackup ожидает снятия блокировки перед продолжением работы.

Внутри утилита gpbackup использует команду COPY с выражением ON SEGMENT для извлечения данных таблиц. Каждый сегмент выполняет команду COPY …​ TO, записывая свои данные в формате CSV в локальные файлы.

Процесс восстановления

Утилита gprestore выполняет восстановление базы данных из бэкапа. Она принимает временную метку бэкапа, которая однозначно его идентифицирует, и каталог его хранения:

$ gprestore --timestamp 20250908074826 --backup-dir /home/gpadmin/backups

gprestore воссоздает схему базы данных из метаданных бэкапа и инициирует загрузку данных в таблицы на сегментах из соответствующих файлов. Для этого используется команда COPY …​ FROM ON SEGMENT. Процесс восстановления также является параллельным и распределенным.

Во время восстановления Greengage DB поддерживает корректность распределения данных. Бэкап можно восстановить как в тот же кластер, сохранив исходное распределение, так и в кластер с другим числом сегментов при использовании опции --resize-cluster. В этом случае gprestore автоматически перераспределяет данные на основе определений таблиц в бэкапе. Это позволяет восстановить базу данных даже после изменения топологии кластера.

SSH-подключения

Обе утилиты используют SSH для взаимодействия между мастер-хостом и сегмент-хостами. Каждая операция на сегменте выполняется в отдельной SSH-сессии. Общее число таких подключений примерно совпадает с числом сегментов в кластере, которое может быть значительным для больших кластеров. Кроме того, увеличение уровня параллелизма операции с помощью опции --jobs умножает число соединений на ее значение. Чтобы избежать узких мест или тайм-аутов при установлении соединений, рекомендуется увеличить значения параметров MaxStartups и MaxSessions в конфигурации SSH на мастер-хосте.

Объекты, входящие в бэкап

gpbackup создает логические бэкапы, которые включают объекты базы данных, а также данные и метаданные (DDL). При необходимости в бэкап могут быть включены и глобальные (кластерные) объекты, такие как роли и табличные пространства.

По умолчанию в бэкап включаются все объекты указанной базы данных. С помощью опций утилиты можно управлять включением глобальных объектов, статистики и системных объектов. Полные списки опций доступны в разделах Обзор синтаксиса gpbackup и Обзор синтаксиса gprestore.

Объекты базы данных

В бэкап включаются следующие объекты уровня базы данных:

  • Таблицы

  • Схемы

  • Расширения процедурных языков

  • Последовательности

  • Комментарии

  • Параметры конфигурации, заданные на уровне сессии (GUC)

  • Индексы

  • Владельцы объектов и привилегии

  • Внешние таблицы для записи и чтения (только DDL)

  • Функции

  • Агрегаты

  • Преобразования типов

  • Типы данных

  • Представления

  • Материализованные представления (только DDL)

  • Протоколы

  • Триггеры

  • Правила

  • Домены

  • Операторы, семейства и классы операторов

  • Преобразования

  • Расширения

  • Элементы полнотекстового поиска: парсеры, словари, шаблоны и конфигурации

  • Статистика таблиц (если указан параметр --with-stats)

ПРИМЕЧАНИЕ
  • Только DDL

    Некоторые объекты сохраняются только в виде DDL. Для таких объектов, например внешних таблиц и материализованных представлений, gpbackup сохраняет только определение объекта (SQL-команду CREATE), но не сохраняет их наполнение данными. При восстановлении gprestore воссоздает их структуру без повторного наполнения данными.

  • Триггеры

    Если в базе данных существуют триггеры, они также включаются в бэкап и восстанавливаются, хотя и не исполняются.

Глобальные объекты

По умолчанию gpbackup включает в бэкапы следующие кластерные объекты:

  • Табличные пространства

  • Параметры конфигурации уровня базы данных (GUC)

  • Определения ресурсных групп

  • Определения ресурсных очередей

  • Роли

  • Назначения (GRANT) ролей базам данных

Опция --without-globals исключает эти объекты из бэкапа.

По умолчанию gprestore не восстанавливает глобальные объекты из бэкапа, сохраняя их состояние на целевом кластере неизменным. При восстановлении с опцией --with-globals gprestore восстанавливает глобальные объекты раньше объектов базы данных, чтобы обеспечить корректные зависимости.

Системные схемы, не входящие в бэкапы

Следующие системные схемы не включаются в бэкап:

  • gp_toolkit

  • information_schema

  • pg_aoseg

  • pg_bitmapindex

  • pg_catalog

  • pg_toast*

  • pg_temp*

Объекты в этих схемах поддерживаются внутренними механизмами Greengage DB и автоматически пересоздаются при восстановлении базы данных. Если вы изменяли объекты в этих схемах (например, в gp_toolkit), такие изменения будут утрачены после восстановления.

Структура бэкапа

Бэкап базы данных, созданный с помощью gpbackup, представляет собой набор файлов, которые хранят логическую структуру и данные базы данных. Точный состав файлов зависит от настроек бэкапа, в частности, от того, какие объекты включены и как задана структура хранения.

Файлы бэкапа делятся на две основные категории:

  • Файлы метаданных на мастер-хосте.

  • Файлы данных на сегмент-хостах.

Файлы метаданных на мастер-хосте

Файлы метаданных описывают структуру базы данных, параметры конфигурации и сведения о создании бэкапа. Они всегда создаются на мастер-хосте.

Файл Описание

gpbackup_<YYYYMMDDHHMMSS>_metadata.sql

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

gpbackup_<YYYYMMDDHHMMSS>_toc.yaml

Содержание бэкапа (Table of Contents, TOC). Перечисляет все таблицы, включенные в бэкап, с их OID и размерами. Используется gprestore для определения порядка восстановления

gpbackup_<YYYYMMDDHHMMSS>_report

Отчет о выполнении операции бэкапа. Содержит сведения о команде, параметрах и статусе выполнения

gpbackup_<YYYYMMDDHHMMSS>_config.yaml

Файл конфигурации бэкапа. Содержит параметры, использованные при создании бэкапа, и сведения об окружении

gpbackup_<YYYYMMDDHHMMSS>_statistics.sql

Сериализованная статистика базы данных. Включается в бэкапы при указании опции --with-stats. Восстановление статистики помогает оптимизатору запросов сохранить производительность после восстановления

gpbackup_history.db

Локальная база данных SQLite, используемая gpbackup и gprestore для хранения информации о выполненных бэкапах и их временных метках

Файлы данных на сегмент-хостах

Каждый сегмент-хост записывает данные таблиц в собственный набор файлов данных. Схема их именования следующая:

gpbackup_<content-id>_<YYYYMMDDHHMMSS>_<OID>.gz

где:

  • <content-id> — идентификатор содержимого сегмента.

  • <YYYYMMDDHHMMSS> — временная метка бэкапа.

  • <OID> — идентификатор таблицы (или партиции).

Структура файлов данных зависит от настроек бэкапа, например:

  • Дробление на партиции (--leaf-partition-data)

    При включении создается отдельный файл данных для каждой партиции партиционированной таблицы.

  • Однофайловая структура (--single-data-file)

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

  • Сжатие (--compression-type и --compression-level)

    При включенном сжатии файлы данных записываются в сжатом виде. Тип сжатия по умолчанию — gzip; также можно указать zstd. Если сжатие отключено, файлы не имеют расширения и содержат данные в виде CSV в обычном тексте.

Охват бэкапа

Помимо полного бэкапа базы данных, gpbackup и gprestore поддерживают частичные бэкапы, которые включают только указанные явно объекты. Это позволяет создавать бэкапы только критически важных данных, сокращает время выполнения и размер бэкапов, а также упрощает миграцию отдельных частей базы данных.

С помощью gpbackup можно включить в бэкап:

  • всю базу данных (по умолчанию);

  • указанные схемы;

  • указанные таблицы;

  • все схемы, кроме указанных;

  • все таблицы, кроме указанных.

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

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

Подробнее см. в разделе Частичное резервное копирование.

Инкрементальные бэкапы

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

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

ВАЖНО

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

Подробнее о работе и настройке инкрементальных бэкапов см. в разделе Инкрементальное резервное копирование.

Расширение функциональности утилит с помощью плагинов хранения

gpbackup и gprestore поддерживают плагины хранения (storage plugin), которые расширяют возможности бэкапа и восстановления за пределы локальной файловой системы. Плагины позволяют сохранять и восстанавливать бэкапы с различных внешних хранилищ, например облачных или сетевых.

Например, плагин хранения в S3 интегрирует gpbackup и gprestore с S3-совместимыми сервисами хранения, что позволяет выполнять бэкапы в Amazon S3 или другие совместимые хранилища. Использование плагинов хранения упрощает управление удаленными бэкапами, обеспечивает централизованное хранение и поддерживает корпоративные политики хранения данных.

Пример настройки и использования плагина приведен в разделе Использование плагина для хранения в S3.