Обзор 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 и размерами.
Используется |
gpbackup_<YYYYMMDDHHMMSS>_report |
Отчет о выполнении операции бэкапа. Содержит сведения о команде, параметрах и статусе выполнения |
gpbackup_<YYYYMMDDHHMMSS>_config.yaml |
Файл конфигурации бэкапа. Содержит параметры, использованные при создании бэкапа, и сведения об окружении |
gpbackup_<YYYYMMDDHHMMSS>_statistics.sql |
Сериализованная статистика базы данных.
Включается в бэкапы при указании опции |
gpbackup_history.db |
Локальная база данных SQLite, используемая |
Файлы данных на сегмент-хостах
Каждый сегмент-хост записывает данные таблиц в собственный набор файлов данных. Схема их именования следующая:
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.