Почему требуется базовое резервное копирование Postgres с WAL для PITR?
Я читаю следующую статью, чтобы настроить PITR. Меня смущает одна вещь: почему в статье рекомендуется выполнять
basebackup
(полное резервное копирование кластера) после настройки непрерывного архивирования WAL. Я думал, что WAL - это настоящие данные? Итак, если у меня есть WAL с момента t =0, зачем мне нужна другая резервная копия? Я спросил в двух других сообществах postgres, но ответ на этот вопрос был «потому что на практике у вас не будет WAL с момента t =0» или что неизвестно, почему оба действительно нужны. В любом случае просто любопытно, спасибо!
2 ответа
Есть псевдослучайный
Database system identifier
который отличается от одной системы баз данных к другой. Это записывается как в pg_controldata, так и в каждом сегменте WAL, и должно соответствовать, чтобы воспроизвести WAL на сервере. В моих руках многократный запуск initdb дает каталоги, которые идентичны, за исключением содержимого pg_controldata и pg_wal / 000000010000000000000001 (и, конечно, временных меток файловой системы).
Поэтому, если вам хочется попасть в пробку, жонглируя бензопилой, вы можете пропустить базовую резервную копию, а затем просто запустить новую initdb и попытаться модифицировать системный идентификатор в новый файл pg_controldata.
Приятного взрыва. В случае успеха ваша награда будет заключаться в том, что вам не нужно будет делать исходную базовую резервную копию, которая сжимается до 1,35 МБ.
Это актуальная проблема сразу после pg_upgrade. Новую систему следует считать уязвимой до тех пор, пока не будет выполнено новое базовое резервное копирование (которое предположительно будет намного больше и медленнее, чем 1,35 МБ). Если вы использовали
pg_upgrade -k
, это новое базовое резервное копирование может составлять большую часть временного окна, необходимого для завершения обновления.
WAL содержит такую информацию: «в файле X, блоке Y запишите эти 13 байтов со смещением z» или «расширите файл X на 1 блок размером 8 КБ».
Вам всегда нужна какая-то отправная точка, из которой вы сможете восстановить WAL:
При аварийном восстановлении это последняя контрольная точка, положение которой записывается в контрольный файл.
С PITR контрольная точка берется из
файл, который создается при запуске базовой резервной копии и содержит контрольную точку, с которой началось резервное копирование.
Если у вас нет точки, с которой можно было бы начать, как вы можете выздороветь?
Возможно, вы ошибаетесь, что база данных изначально пуста, поэтому все, что вам нужно, это файлы WAL с незапамятных времен. Но это неправда: даже сразу после