С помощью 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 для каждого экземпляра, выполните команду:
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
и получить в результате состояние всех имеющихся копий в соответствии с текущей политикой хранения; никакие необратимые действия при этом выполняться не будут.