Создание базовой резервной копии PostgreSQL
Стандартная процедура создания базовой резервной копии выглядит следующим образом:
(1) Выполнение команды pg_backup_start (в версии 14 и более ранних версиях - pg_start_backup);
(2) Снимок кластера баз данных с помощью любой команды архивации;
(3) Выполнение команды pg_backup_stop (в версии 14 и более ранних версиях - pg_stop_backup).
Эту простая процедура в основном подходит администраторам баз данных, поскольку она не требует никаких специальных инструментов, кроме обычных средств, таких как команда cp или аналогичный инструмент архивирования. Кроме того, эта процедура не требует блокировки таблиц, поэтому все пользователи могут продолжать выполнять запросы, не подвергаясь влиянию операции резервного копирования. Это значительное преимущество перед другими основными РСУБД с открытым исходным кодом.
Самый простой способ создать базовую резевную копию – это использовать утилиту pg_basebackup.
Поскольку команды pg_backup_start и pg_backup_stop очень важны для понимания PITR, в следующих подразделах мы рассмотрим их более подробно.
Примечание:
Команды pg_backup_start и pg_backup_stop определены в src/backend/access/transam/xlogfuncs.c.
pg_backup_start (версия 14 и более ранние версии - pg_start_backup)
Выполнение команды pg_backup_start необходимо для начала создания резервной копии.
Как уже было отмечено ранее, процесс восстановления начинается с точки REDO, поэтому команда pg_backup_start должна выполнить контрольную точку для явного создания точки REDO в начале создания базовой резервной копии. Более того, местоположение контрольной точки должно быть сохранено в файле, отличном от pg_control, поскольку регулярные контрольные точки могут выполняться несколько раз во время резервного копирования. Поэтому pg_backup_start выполняет следующие четыре операции:
- Переведите базу данных в режим полностраничной записи;
- Переключитесь на текущий файл сегмента WAL (версии 8.4 и новее);
- Выполните контрольную точку.
- Создайте файл backup_label. Этот файлсодержит важную информацию о самом резервном копировании базы, такую как местоположение контрольной точки.
Третья и четвертая операции составляют суть этой команды. Первая и вторая операции предназначены для более надежного восстановления кластера баз данных.
Файл backup_label содержит информацию о:
- CHECKPOINT LOCATION –местоположение LSN, в котором была записана контрольная точка, созданная этой командой;
- START WAL LOCATION – не используется совместно с PITR, но используется при потоковой репликации, которая описана в разделе 11. Название START WAL связано с тем, что резервный сервер в режиме репликации считывает это значение только один раз при первом запуске.
- BACKUP METHOD – метод, используемый для создания резервной копии.
- BACKUP FROM – Здесь показано, с какого сервера берется эта резервная копия - с основного или резервного.
- START TIME – временная метка, уточняющая момент выполнения команды pg_backup_start.
- LABEL – Это метка, указанная в команде pg_backup_start.
- START TIMELINE – Это временная шкала начала резервного копирования. Эта функция была введена в версии 11.
Примечание: backup_label
Ниже приведен пример файла backup_label в версии 16, который создается с помощью pg_basebackup:
postgres> cat /usr/local/pgsql/data/backup_label START WAL LOCATION: 0/1B000028 (file 00000001000000000000001B) CHECKPOINT LOCATION: 0/1B000060 BACKUP METHOD: streamed BACKUP FROM: primary START TIME: 2024-1-1 11:45:19 GMT LABEL: pg_basebackup base backup START TIMELINE: 1
При восстановлении базы данных с помощью базовой резервной копии PostgreSQL берет 'CHECKPOINT LOCATION' из файла backup_label, чтобы прочитать запись контрольной точки из соответствующего архивного журнала. Затем он получает точку REDO из этой записи и запускает процесс восстановления. (ПБолее подробную информацию Вы найдете в следующем разделе).
pg_backup_stop (версия 14 и более ранние версии - pg_stop_backup)
Для завершения резервного копирования команда pg_backup_stop выполняет следующие пять операций:
- Переход в режим неполностраничной записи, если он был принудительно изменен командой pg_backup_start.
- Создание записи XLOG о завершении поцесса создания резервного копирования
- Переключение файла сегмента WAL.
- Создание файла backup history, содержащего информацию о содержимом файла backup_label и метки времени, когда была выполнена команда pg_backup_stop
- Удаление файла backup_label. Файл backup_label необходим только для восстановления системы из базовой резервной копии, после копирования потребность в нем отпадает.
Примечание:
Способ присвоения имени файлу истории резервного копирования:
{WAL segment}.{offset value at the time the base backup was started}.backup




