@Solitudine

Как настроить PITR PostgreSQL?

Всем привет. Подскажите, если кто-то в курсе и делал подобное.
Есть база, у которой подключена реплика в физическом слоте.
С этой реплики периодически снимаются снапшоты диска целиком (автоматически по расписанию гугле).
Я пытаюсь провернуть Point-in-Time восстановление, развернув доп. виртуалку, подцепив в качестве диска снапшот реплики, дополнительно выкачал с мастера wal-журналы в отдельный каталог и настроил recovery_conf с указанием этого каталога и времени, на которое нужно восстановить.
Но собсна это не работает, база либо в fatal уходит, либо в panic. С ошибками тип

PANIC: could not locate a valid checkpoint record

Или

FATAL:  recovery ended before configured recovery target was reached


Можете подсказать, такой вариант, который я провернуть хочу - вообще работоспособный, и если да, то что я делаю не так. Или же весь процесс построен неправильно, и таким образом PiT не провернуть?
Сам лог с момента запуска с попыткой восстановления выглядит так:

2022-02-10 13:31:29.106 UTC [1515] LOG:  starting PostgreSQL 13.5 (Ubuntu 13.5-2.pgdg20.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit
2022-02-10 13:31:29.107 UTC [1515] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2022-02-10 13:31:29.109 UTC [1515] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2022-02-10 13:31:29.115 UTC [1516] LOG:  database system was shut down at 2022-02-10 13:31:25 UTC
cp: cannot stat '/tmp/wal_backup/00000002.history': No such file or directory
2022-02-10 13:31:29.118 UTC [1516] LOG:  starting point-in-time recovery to 2022-02-10 07:00:00+00
2022-02-10 13:31:29.134 UTC [1516] LOG:  restored log file "0000000100000011000000B2" from archive
2022-02-10 13:31:29.349 UTC [1516] LOG:  invalid primary checkpoint record
2022-02-10 13:31:29.349 UTC [1516] PANIC:  could not locate a valid checkpoint record
2022-02-10 13:31:29.564 UTC [1515] LOG:  startup process (PID 1516) was terminated by signal 6: Aborted
2022-02-10 13:31:29.564 UTC [1515] LOG:  aborting startup due to startup process failure
2022-02-10 13:31:29.565 UTC [1515] LOG:  database system is shut down
pg_ctl: could not start server
Examine the log output.
  • Вопрос задан
  • 249 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Для pitr вам нужен:
- basebackup как основа, должно быть завершено его снятие до датывремени требуемого восстановления pitr
- непрерывный архив всех и абсолютно каждого сегмента wal без пропусков от момента checkpoint перед снятием используемого в восстановлении basebackup и до требуемой точки восстановления

database system was shut down at 2022-02-10 13:31:25 UTC
starting point-in-time recovery to 2022-02-10 07:00:00+00

Это, конечно, невозможно даже с корректным архивом WAL.
У postgresql REDO recovery, а не UNDO. Pitr только вперёд от текущей позиции. И не раньше достижения точки консистентности состояния (окончания снятия basebackup)

Чтобы не ходить по граблям консистентности ещё и файловой системы, basebackup предпочтительнее снимать с самого postgresql, а не снимком блочного устройства. Но в целом вариант предусмотренный, ничем неотличимый от обычного crash recovery вроде старта после пропадания электричества (лишь бы fsync работал на всех уровнях корректно и не игнорировался).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы