В архиве журнала пропал сегмент, бэкап нельзя восстановить на нужный момент
Ошибка pg_probackup «WAL segment … is absent»: в архиве WAL не хватает сегмента. Бэкап не проходит проверку, восстановление на момент времени невозможно. Как найти дыру и закрыть её.
Что это значит
pg_probackup хранит полные бэкапы и архив журнала WAL между ними. Чтобы восстановиться на любой момент, архив должен быть непрерывным. Ошибка означает, что в нём дыра: сегмент не заархивировался. Бэкап, которому нужен этот сегмент, не проходит проверку, и восстановление после него на момент времени не получится.
Дыры появляются, когда archive_command какое-то время падал (кончилось место, недоступен каталог архива), а потом сегменты удалились с сервера базы.
Как проверить
- Есть ли дыры и где:
pg_probackup show -B <каталог> --instance <экземпляр> --archive
- Журнал PostgreSQL за время дыры: ошибки
archive command failed, см. отдельную статью. - Проверка бэкапов:
pg_probackup validate -B <каталог> --instance <экземпляр>
Что сделать
- Починить архивирование, если оно ещё падает.
- Сразу снять новый полный бэкап: от него архив снова будет непрерывным.
- Старые бэкапы до дыры остаются годными для восстановления на момент самого бэкапа, но не дальше дыры.
- Поставить алерты на падение
archive_commandи на дыры в архиве, а раз в месяц проверять восстановление на отдельной машине.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать