Управление каталогом резервных копий

С помощью pg_probackup3 вы можете управлять резервными копиями в командной строке:

Просмотр информации о резервных копиях

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

pg_probackup3 show -B каталог_копий

pg_probackup3 выводит список всех имеющихся резервных копий. Например:

BACKUP INSTANCE 'dev', version 3
=================================================================================================================================
Instance Version ID       End time                 Mode  WAL Mode TLI Duration Data WAL Zalg Zratio Start LSN  Stop LSN   Status
=================================================================================================================================
dev      17      1-full   2024-12-10 14:51:34+0000 FULL  STREAM   1   1s       38MB -   none 1.00   0/A000028  0/A000138  OK
dev      17      1-delta  2024-12-10 14:52:02+0000 DELTA STREAM   1            11MB -   none 1.00   0/D000028  0/D000180  OK
dev      17      2-delta  2024-12-10 14:52:28+0000 DELTA STREAM   1            22MB -   none 1.00   0/10000028 0/10000138 OK
dev      17      1a-full  2024-12-10 14:54:10+0000 FULL  ARCHIVE  1   1s       75MB -   none 1.00   0/12000028 0/12000138 OK
dev      17      1a-delta 2024-12-10 14:54:32+0000 DELTA ARCHIVE  1            17MB -   none 1.00   0/14000028 0/14000138 OK

Для каждой копии выдаются следующие сведения:

  • Instance — имя экземпляра.

  • Version — базовая версия Postgres Pro.

  • ID — идентификатор резервной копии.

  • End time — время окончания резервного копирования.

  • Mode — режим, в котором была сделана копия. Возможные значения: FULL (полная), DELTA (инкрементальная), PTRACK (копирование изменений).

  • WAL Mode — режим доставки WAL. Возможные значения: STREAM (потоковый) и ARCHIVE (архивный).

  • TLI — идентификаторы линии времени текущей копии и её родителя.

  • Duration — время, за которое была выполнена данная копия.

  • Data — объём файлов данных в этой копии. Это значение не включает в себя размер файлов WAL. Для копий, сделанных в режиме STREAM, общий размер можно рассчитать, сложив значения Data и WAL.

  • WAL — размер несжатых файлов WAL, которые должны быть применены в процессе восстановления копии для достижения согласованного состояния.

  • compress-alg — алгоритм сжатия, используемый при получении резервной копии. Возможные значения: zlib, lz4, zstd и none (сжатие не производилось).

  • Zratio — коэффициент сжатия, вычисленный как отношение «uncompressed-bytes» (объём несжатых данных в байтах) к «data-bytes» (итоговый объём данных).

  • Start LSN — последовательный номер в журнале WAL, соответствующий началу процесса копирования. С этой позиции накатываются изменения (REDO) в процессе восстановления Postgres Pro.

  • Stop LSN — последовательный номер в журнале WAL, соответствующий окончанию процесса копирования. Это позиция точки согласованности при восстановлении Postgres Pro.

  • Status — состояние резервной копии. Возможные варианты:

    • OK — резервная копия сделана и пригодна к использованию.

    • DONE — резервная копия сделана, но не проверена.

    • RUNNING — резервное копирование выполняется.

    • MERGING — резервная копия объединяется.

    • MERGED — файлы резервной копии были успешно обработаны в процессе объединения копий, но её метаданные ещё изменяются. Это состояние могут иметь только полные резервные копии.

    • DELETING — файлы резервной копии удаляются.

    • CORRUPT — некоторые файлы резервной копии повреждены.

    • ERROR — резервное копирование было прервано из-за неожиданной ошибки.

    • ORPHAN — резервная копия непригодна к использованию, так как её родительская копия испорчена или отсутствует.

    • HIDDEN_FOR_TEST — скрипт теста пометил копию как несуществующую. (Собственно pg_probackup3 никогда не устанавливает это состояние.)

Восстановить кластер из копии можно только для копий с состоянием OK или DONE.

Чтобы получить более подробную информацию о копии, укажите в команде show её идентификатор:

pg_probackup show -B каталог_копий --instance=имя_экземпляра -i ид_резервной_копии

Пример вывода:

# Backup 2-delta information.
backup_id=2-delta
parent_backup_id=1-delta
backup_mode=delta
tli=1
start_lsn=268435496
stop_lsn=268435768
# start-time 2024-12-10 14:52:28+0000
start_time=1733842348
# end-time 2024-12-10 14:52:28+0000
end_time=1733842348
recovery-time=0
data-bytes=22986632
uncompressed-bytes=22986632
compress-alg=none
compress-level=1
server-version=170001
min_xid=0
min_multixact=0
backup_source=pro
primary_conninfo=user=garbuz reusepass=1 channel_binding=prefer host=localhost port=5432 sslmode=prefer sslcompression=0 sslcertmode=allow sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres gssdelegation=0 target_session_attrs=any target_server_type=any hostorder=sequential load_balance_hosts=disable
stream=true
program-version=3.0.0
block-size=8192
xlog-block-size=8192
status = OK

В расширенном выводе представлены дополнительные атрибуты:

  • compress-alg — алгоритм сжатия, используемый при получении резервной копии. Возможные значения: zlib, lz4, zstd и none (сжатие не производилось).

  • compress-level — уровень сжатия, применяемый в процессе резервного копирования.

  • block-size — значение параметра block_size, установленное в кластере Postgres Pro в начале копирования.

  • checksum-version — признак включения параметра data_checksums в исходном кластере Postgres Pro. Возможные значения: 1, 0.

  • program-version — полная версия программы pg_probackup3, которая создала эту копию.

  • start-time — время начала резервного копирования.

  • end-time — время окончания резервного копирования.

  • end-validation-time — время окончания проверки резервной копии.

  • expire-time — время, когда закреплённая копия может быть ликвидирована в соответствии с политикой хранения. Этот атрибут имеется только у закреплённых копий.

  • uncompressed-bytes — размер файлов данных до добавления заголовков страниц и сжатия. В случае использования сжатия оценить его эффективность можно, сопоставив объём uncompressed-bytes (байтов несжатых данных) с data-bytes (байтов данных).

  • pgdata-bytes — размер файлов данных Postgres Pro на момент копирования. Эффективность инкрементального метода копирования можно оценить, сопоставив объём pgdata-bytes (байтов в PGDATA) с uncompressed-bytes (байтов несжатых данных).

  • recovery-xid — идентификатор транзакции, соответствующей моменту окончания резервного копирования.

  • parent-backup-id — идентификатор родительской копии. Определён только для инкрементальных копий.

  • primary_conninfo — параметры подключения libpq, с использованием которых производилось подключение к кластеру Postgres Pro для получения этой резервной копии. Пароль в эти параметры не включается.

  • note — текстовое примечание, связанное с копией.

  • content-crc — контрольная сумма файла backup_content.control, рассчитанная по алгоритму CRC32. Она позволяет выявить повреждение метаданных копии.

Можно использовать параметр --format=tree, чтобы посмотреть список резервных копий в виде дерева:

pg_probackup3 show -B каталог_копий --format=tree

Вывод будет выглядеть вот так:

BACKUP INSTANCE 'dev', version 3

├── 1-full

│   └── 1-delta

│       └── 2-delta

└── 1a-full

    └── 1a-delta

Вы также можете получить подробную информацию о резервной копии в формате JSON:

pg_probackup3 show -B каталог_копий --instance=имя_экземпляра --format=json -i backup_id

Пример вывода:

[
    {
        "instance": "dev",
        "backups": [
            {
                "id": "2-delta",
                "parent-backup-id": "1-delta",
                "status": "OK",
                "start-time": "2024-12-10 14:52:28+0000",
                "end-time": "2024-12-10 14:52:28+0000",
                "backup-mode": "DELTA",
                "wal": "STREAM",
                "block-size": 8192,
                "xlog-block-size": 8192,
                "program-version": "3.0.0",
                "server-version": 17,
                "current-tli": 1,
                "start-lsn": "0/10000028",
                "stop-lsn": "0/10000138",
                "data-bytes": 22986632,
                "uncompressed-bytes": 22986632,
                "wal-bytes": 0,
                "compress-alg": "none",
                "compress-level": 1,
                "min-xid": 0,
                "min-multixact": 0,
                "backup-source": "pro"
            }
        ]
    }
]

Просмотр оглавления архива WAL

Чтобы получить информацию об архиве WAL для каждого экземпляра, выполните команду:

pg_probackup3 show -B каталог_копий [--instance=имя_экземпляра] --archive

pg_probackup3 выводит список всех имеющихся файлов WAL, сгруппированных по линиям времени. Например:

BACKUP INSTANCE 'dev', version 3
=====================================================================================================================
TLI Parent TLI Switchpoint Min Segno                Max Segno                N segments Size Zratio N backups Status
=====================================================================================================================
1              0/0         000000010000000000000001 000000010000000000000006 6          96MB 1.17   1         OK

Для каждой линии времени выдаются следующие сведения:

  • TLI — идентификатор линии времени.

  • Parent TLI — идентификатор линии времени, от которой была ответвлена данная.

  • Switchpoint — LSN момента, когда эта линия времени ответвилась от родительской.

  • Min Segno — первый сегмент WAL, относящийся к этой линии времени.

  • Max Segno — последний сегмент WAL, относящийся к этой линии времени.

  • N segments — количество сегментов WAL, относящихся к этой линии времени.

  • Size — объём, который занимают файлы на диске.

  • Zalg — алгоритм сжатия, используемый при получении резервной копии. Возможные значения: zlib, lz4, zstd, none(сжатие не производилось).

  • Zratio — коэффициент сжатия, вычисляемый по формуле N segments * wal_segment_size * wal_block_size / Size.

  • N backups — число копий, относящихся к этой линии времени. Для получения подробных сведений об этих копиях воспользуйтесь форматом JSON.

  • Status — состояние архива WAL для этой линии времени. Возможные значения:

    • OK — в архиве присутствуют все сегменты WAL между Min Segno и Max Segno.

    • DEGRADED — отсутствуют некоторые сегменты WAL между Min Segno и Max Segno. Понять, какие файлы утрачены, можно, посмотрев этот отчёт в формате JSON. Такой статус может возникать, если несколько файлов WAL (в середине последовательности) были удалены командой delete с параметром --delete-wal в соответствии с политикой хранения. Данный статус не влияет на корректность восстановления, но восстановить кластер до некоторых точек восстановления может быть невозможно.

Чтобы получить более подробную информацию об архиве WAL в формате JSON, выполните команду:

pg_probackup3 show -B каталог_копий [--instance=имя_экземпляра] --archive --format=json

Пример вывода:

[
    {
        "instance": "dev",
        "version": "3",
        "timelines":
        [
            {
                "tli": 1,
                "parent-tli": 0,
                "switchpoint": "0/0",
                "min-segno": "000000010000000000000001",
                "max-segno": "000000010000000000000006",
                "n-segments": 6,
                "size": 100663615,
                "zratio": 1.17,
                "status": "OK",
                "backups": [
            {
                "id": "1-full",
                "status": "OK",
                "start-time": "2025-02-11 14:22:16+0000",
                "end-time": "2025-02-11 14:22:16+0000",
                "backup-mode": "FULL",
                "wal": "STREAM",
                "block-size": 8192,
                "xlog-block-size": 8192,
                "program-version": "3.0.0",
                "server-version": 17,
                "current-tli": 1,
                "start-lsn": "0/5000028",
                "stop-lsn": "0/5000128",
                "data-bytes": 60748163,
                "uncompressed-bytes": 60748163,
                "wal-bytes": 0,
                "compress-alg": "none",
                "compress-level": 1,
                "min-xid": 0,
                "min-multixact": 0,
                "backup-source": "pro"
            }
                ]
            }
        ]
    }]

В основном в этом формате представлены те же поля, что и в текстовом формате, с некоторыми исключениями:

  • Размер выражается в байтах.

  • Атрибут closest-backup-id содержит идентификатор самой последней доступной копии, принадлежащей к одной из предыдущих линий времени. Вы можете использовать эту копию для восстановления на момент, относящийся к этой линии времени. Если такой копии не существует, данный атрибут будет пустым.

  • В массиве lost-segments представлены интервалы отсутствующих сегментов на линиях времени в непригодном состоянии (DEGRADED). На линиях времени в целостном состоянии OK массив lost-segments пуст.

  • В массиве backups перечисляются все резервные копии, относящиеся к данной линии времени. Если к линии времени не относятся резервные копии, этот массив пуст.

Объединение резервных копий

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

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

Примечание

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

Чтобы объединить инкрементальную копию с полной родительской, выполните команду merge, передав ей идентификатор копии самой последней резервной копии, подлежащей объединению:

pg_probackup3 merge -B каталог_копий --instance=имя_экземпляра -i ид_резервной_копии

Эта команда объединяет копии, относящиеся к одной цепочке инкрементальных копий. Если выбирается полная копия, она будет объединена с первой инкрементальной копией после неё. Если выбрана инкрементальная копия, она будет объединена с родительской полной копией, включая все инкрементальные копии между ними. После выполнения команды полная копия содержит все объединённые данные, а инкрементальные копии удаляются как ненужные. Таким образом, операция объединения по сути равнозначна созданию новой полной копии с удалением всех устаревших копий, но выполняется она быстрее, особенно с большими объёмами данных, и не нагружает подсистему ввода/вывода и сеть (если pg_probackup3 работает в удалённом режиме).

Чтобы объединить цепочку инкрементальных копий, укажите идентификаторы первой и последней копий в цепочке:

pg_probackup3 merge -B каталог_копий --instance=имя_экземпляра --merge-from-id=объединить_от -i ид_резервной_копии

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

pg_probackup3 merge -B каталог_копий --instance=имя_экземпляра -i ид_резервной_копии --merge-interval=интервал_объединения

Перед объединением pg_probackup3 проверяет все задействуемые резервные копии, чтобы удостовериться в их целостности. Вы можете проверить текущее состояние резервной копии, передав её идентификатор команде show.

pg_probackup show -B каталог_копий --instance=имя_экземпляра -i ид_резервной_копии

Если процесс объединения ещё не закончен, вы увидите состояние MERGING. Для полных копий также можно увидеть состояние MERGED в процессе изменения метаданных на последнем этапе объединения. В случае прерывания операции объединения она может быть перезапущена.

Удаление резервных копий

Для удаления резервной копии, ставшей ненужной, выполните команду:

pg_probackup3 delete -B каталог_копий --instance=имя_экземпляра -i ид_резервной_копии

Эта команда удалит резервную копию с заданным ид_резервной_копии вместе со всеми инкрементальными копиями, которые от неё зависят (если таковые найдутся). Таким образом вы можете удалить некоторые последние инкрементальные копии, сохранив предыдущую полную копию и некоторые следующие за ней инкрементальные копии.

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