Ну вот оно!
Долгожданное обновление в 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
1 | sudo -u postgres psql |
Включаем summarize_wal
1 | ALTER SYSTEM SET summarize_wal = on; |
Затем достаточно перезагрузить саму конфигурацию без перезагрузки PostgreSQL !
Перезагружаем конфигурацию PostgreSQL
1 | SELECT pg_reload_conf(); |
Создадим каталоги для хранения полного бэкапа и инкрементных бэкапов, что мы будем делать ежедневно ночью.
Создаём директории:
1 2 3 | sudo mkdir -p /backups/fullbackup sudo mkdir -p /backups/{incr_Monday,incr_Tuesday,incr_Wednesday,incr_Thursday,incr_Friday} |
Устанавливаем правильные права для них:
1 | sudo chown -R postgres:postgres /backups && sudo chmod -R 755 /backups |
Запускаем первое полное резервное копирование:
Выполняем его с помощью pg_basebackup:
1 | sudo -u postgres pg_basebackup -D /backups/fullbackup |
Проверяем содержимое каталога с полным бэкапом:
1 2 | ls /backups/fullbackup sudo du -sh /backups/fullbackup |
И посмотрим его размер:
Отлично!
Создаем инкрементальные бэкапы
Инкрементальные бэкапы мы делаем по ночам, всю рабочую неделю каждый день:
1 2 3 4 5 | sudo -u postgres pg_basebackup --incremental=/backups/fullbackup/backup_manifest -D /backups/incr_Monday/ sudo -u postgres pg_basebackup --incremental=/backups/incr_Monday/backup_manifest -D /backups/incr_Tuesday/ sudo -u postgres pg_basebackup --incremental=/backups/incr_Tuesday/backup_manifest -D /backups/incr_Wednesday/ sudo -u postgres pg_basebackup --incremental=/backups/incr_Wednesday/backup_manifest -D /backups/incr_Thursday/ sudo -u postgres pg_basebackup --incremental=/backups/incr_Thursday/backup_manifest -D /backups/incr_Friday/ |
В понедельник:
Затем также во вторник, среду, четверг, и пятницу (11,12,13,14,15 число)
Проверим размер инкрементальных бэкапов, что мы создали например в понедельник (Инкременты также включают кластер)
1 | du -sh /backups/incr_Monday/ |
Как видите в сравнении с полным бэкапом размер инкремента в десятки раз меньше, так как содержит только изменения, что произошли с момента создания последнего.
Рекомендую также создать скрипт для удаления старых бэкапов, чтоб не забивать диск, всегда перед первым полным бэкапом (Предварительно копируя его и инкременты в облако).
ВОССТАНОВЛЕНИЕ:
И так, чтоб восстановится из бэкапа если наступит такая необходимость мы должны снова собрать в один полный бэкап наши инкременты. (Присоединив их к первому полному) до того момента на который хотим восстановится, например если нас интересует среда делаем так:
Создаём директорию для объединённого бэкапа
1 | sudo mkdir -p /combinebackup |
Устанавливаем правильные права:
1 2 3 | sudo chown -R postgres:postgres /combinebackup sudo chmod -R 755 /combinebackup |
Объединяем полный и инкрементальные бэкапы (До среды включая):
Зарегистрируйтесь, чтоб продолжить чтение статьи
Зарегистрироваться / Войти
Подробное видео о выше проделаной работе смотрите здесь >>>
Полный подробный курс по Администрированию PostgreSQL и 1С здесь >>>