LINUX.ORG.RU
ФорумAdmin

Восстановление данных PostgreSQL

 , ,


0

1

Бывает проблема когда кто-то по ошибке или умышленно удаляет WAL-файлы и после этого PostgreSQL не стартует. Понимаю, что без WAL состояние базы неконсистентное. Понимаю, что можно принудительно заставить PostgreSQL стартануть без WAL и попытаться что-то вытащить из базы. Но это все не панацея. Поэтому решил рассмотреть другой путь: чаще всего на моих серверах в качестве файловой системы используется ext4 и xfs.

Решил провести эксперимент:

  1. Поднимаю виртуалку на Rocky 9 (отдельный раздел под /var/lib/pgsql).
  2. Устанавливаю PostgreSQL 16 из стандартных репозиториев.
  3. Создаю пустую базу, в ней таблица с 2 полями, в таблицу помещаю тестовую запись.
  4. Останавливаю PostgreSQL.
  5. Удаляю WAL-файл из /var/lib/pgsql/16/data/pg_wal.
  6. Отмонтирую /var/lib/pgsql.
  7. Пытаюсь восстановиться.

Итог:

  • extundelete не видит удаленный файл (искал по имени и размеру)
  • xfs_undelete не видит удаленный файл (искал по имени и размеру)
  • R-Studio не видит удаленный файл (искал по имени и размеру)

При этом, если создать какой-нибудь текстовый файл и удалить его, то все средства восстановления видят и восстанавливают файл.

Имхо, условия максимально комфортные для восстановления. Что я делаю не так?

Прежде всего, если удаление файлов БД настолько частая ситуация, то это и стоит решать. Ну там, руки вырвать, уволить, вывезти в ближайший лес и прикопать, в общем на свой вкус.

А по теме, лучше посмотреть на ФС со снапшотами, и скидывать эти снапшоты на отдельное хранилище

hippi90 ★★★★★
()

Я вообще не представляю зачем сейчас крутить постгрю руками, когда для куба есть куча классных операторов, которые делают всё за тебя, в том числе возятся с wal и его резервированием. Если не получается вертеть постгрю самому, я бы рекомендовал посмотреть на заландо.

Pierre_Dolle
()

Системные администраторы делятся на тех, кто еще не делает бэкап, и тех, кто их уже делает.

И ещё есть третья группа, кто делает бэкап и проверяет целостность бэкапа.

kostik87 ★★★★★
()