timelineid и файл timeline history в PostgreSQL
Timeline в PostgreSQL используется для разделения понятий исходного кластера базы данных и восстановленного кластера. Это центральная концепция PITR. В данном разделе описаны две вещи, связанные с временной шкалой: timelineId и файл timeline history.
timelineId
Каждому timeline присваивается идентификатор или timelineId - 4-байтовое беззнаковое целое число, начинающееся с 1.
Каждому кластеру базы данных также присваивается индивидуальный timelineid. Идентификатор исходного кластера базы данных, созданного утилитой initdb, равен 1. При восстановлении кластера базы данных временной идентификатор увеличивается на 1. Например, в примере из предыдущего раздела временной идентификатор кластера, восстановленного из исходного, равен 2.
Рисунок 119 иллюстрирует процесс PITR с точки зрения timelineId.
Для того, чтобы вернуться к начальной точке восстановления, мы сначала удаляем текущий кластер базы данных, а затем восстанавливаем резервную копию БД, сделанную ранее. Эта ситуация представлена на рисунке кривой с красной стрелкой.
Далее мы запускаем сервер PostgreSQL, который воспроизводит WAL-данные в архивных журналах с точки REDO, созданной командой pg_backup_start, до цели восстановления. Эта ситуация представлена на рисунке синей линией со стрелкой. Затем восстанавливаемому кластеру баз данных назначается новый timelineid равный 2, и PostgreSQL запускается по новому timeline.
Как уже упоминалось в главе 9, первые 8 цифр имени файла сегмента WAL равны timelineId кластера базы данных, в котором был создан данный сегмент. При изменении timelineId имя файла сегмента WAL также будет изменено.
Сфокусировавшись на файлах сегмента WAL, можно еще раз описать процесс восстановления. Предположим, что мы восстанавливаем кластер базы данных с помощью двух архивных журналов '000000010000000000000009' и '00000001000000000000000A'. Вновь восстановленному кластеру баз данных присваивается timelineid равный 2, и PostgreSQL создает сегмент WAL из '000000020000000000000000000A'. Смотрите рис. 120.
Файл Timeline History
Когда процесс PITR завершается, в каталоге архива и в подкаталоге pg_xlog (в версии 10 и новее - в подкаталоге pg_wal) создается файл timeline history с ориентировочным названием '00000002.history'.
Правила присвоения названия данному файлу описано ниже:
"8-digitnewtimelineId".history
Файл timeline history содержит как минимум одну строку, каждая из которых состоит из:
timelineId –timelineId архивных журналов, используемых для восстановления.
LSN – местоположение LSN, в котором произошло переключение сегмента WAL.
reason – объяснение причин изменения timeline.
Пример:
postgres> cat /home/postgres/archivelogs/00000002.history 1 0/A000198 before 2024-1-1 12:05:00.861324+00
Смысл данной записи заключается в следующем:
Кластер базы данных (timelineId = 2) основан на базовой резервной копии, timelineId которой равен 1, и восстанавливается до момента '1-1-202412:05:00.861324+00' путем воспроизведения архивных журналов до '0/A000198'.
Таким образом, каждый файл timeline history дает отражает историю восстановленного кластера базы данных. Более того, он используется в самом процессе PITR. Подробности описаны в следующем подразделе.
Примечание:
В версии 9.3 был изменен формат файла timeline history. Форматы версии 9.3 и новее приведены ниже.
Версия 9.3 и новее:
timelineIdLSN"reason"
Версия 9.2 и более ранние версии:
timelineIdWAL_segment"reason"





