Ну вот оно!

Долгожданное обновление в PostgreSQL 17 теперь умеет штатно создавать инкрементные (инкрементальные) бэкапы!

Да, то что MS SQL умел нверное со времен когда «колесо» придумало человека )

Согласен! Лучше поздно, чем никогда.

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

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

Вы экономите место на диске скорость в десятки раз выше и тому подобное.

Наша задача в сегодняшней статье разобраться, как это по факту работает, как создать такой бэкап и восстановится из него.

 

Что ж тянуть не будем, приступаем к работе!

У нас есть тестовая база БП 3.0 и Ubuntu server 24.04, где уже установлен PostgreSQL 17 от Postgres Pro для 1С.

Документ Требование-накладная

Поставленная задача:

Создать полную резервную копию кластера (Где есть база БП 3.0 и восстановится на среду, используя инкременты)

На первом шаге нам надо включить WAL Summary в PostgreSQL 17

Postgres 17 поставляется с новым фоновым рабочим процессом, называемым процессом WAL summaryer , который создает «сводки» файлов WAL в каталоге pg_wal/summaries .

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

 

Включение WAL Summary в PostgreSQL

Для активации summarize_wal и перезагрузки конфигурации PostgreSQL выполняем:

Входим в psql под пользователем postgres

Включаем summarize_wal

Затем достаточно перезагрузить саму конфигурацию без перезагрузки PostgreSQL !

Перезагружаем конфигурацию PostgreSQL

ALTER SYSTEM SET summarize_wal = on

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

Создаём директории:

Устанавливаем правильные права для них:

Запускаем первое полное резервное копирование:

Выполняем его с помощью pg_basebackup:

Проверяем содержимое каталога с полным бэкапом:

sudo du -sh backups fullbackup

И посмотрим его размер:

Полный размер бэкапа 587 мб

Отлично!

Создаем инкрементальные бэкапы

Инкрементальные бэкапы мы делаем по ночам, всю рабочую неделю каждый день:

В понедельник:

Первый документ в понедельник

Затем также во вторник, среду, четверг, и пятницу (11,12,13,14,15 число)

Проверим размер инкрементальных бэкапов, что мы создали например в понедельник (Инкременты также включают кластер)

Инкрементный бэкап - Понедельник

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

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

 

ВОССТАНОВЛЕНИЕ:

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

Создаём директорию для объединённого бэкапа

Устанавливаем правильные права:

Объединяем полный и инкрементальные бэкапы (До среды включая):

Проверяем содержимое объединённого бэкапа:

Остановка PostgreSQL перед восстановлением:

Копируем файлы из объединённого бэкапа в директорию PostgreSQL:

Просмотр файла backup_label (Убедимся, что наш бэкап):

Устанавливаем правильные права на директорию данн

Часть статьи скрыта
Доступно после бесплатной регистрации

После регистрации откроется полный текст и дополнительные материалы.

Подробное видео о выше проделаной работе смотрите здесь >>>

Полный подробный курс по Администрированию PostgreSQL и 1С здесь >>>

От Богдан Кухар

Профессионал 1С с 10-летним опытом. Эксперт в области администрирования и программировании в 1С. Делюсь знаниями на блоге, когда есть время :) Пишите мне на team@kuharbogdan.com

4 комментария для “Инкрементальный бэкап в PostgreSQL 17”
  1. Добрый день извиняюсь.

    А вот тут «Рекомендую также создать скрипт для удаления старых бэкапов, чтоб не забивать диск, всегда перед первым полным бэкапом (Предварительно копируя его и инкременты в облако).»

    То есть удалять нужно содержимое папки fulbackup полные бекапы или инкрементальные?
    И вообще получается вот эту команду также надо в cron вешать?
    sudo -u postgres pg_basebackup -D /backups/fullbackup

    Немного что то не допонял, что удалять и какие именно бекапы? и как все это запускать автоматически?

Добавить комментарий

База знаний 1С