Инструкция по восстановлению резервной копии кластера СУБД Postgres
Инструкция по восстановлению резервной копии кластера СУБД Postgres
0. База данных (кластер) размещена в /DATABASE/data
Резервные копии размещены в /BACKUP/db/ггггммдд
Используется PostgreSQL-12.
1. Остановим кластер
# service postgresql-12 stop
2. Переименуем каталог с текущим кластером. Он может понадобится для разбора полётов.
# mv /DATABASE/data /DATABASE/data1
3. Чтобы не забыть что за кластер у нас тут лежит, обязательно делаем пометку.
# touch /DATABASE/data1/readme
# mcedit /DATABASE/data1/readme
Пишем кратко, что случилось.
30.08.2022 Иванов Петр ==================
Ночью электрики на спор дернули рубильник, всё погасло. На утро база при запуске крашнулась. Восстанавливаю бэкап за 29.08.2022. Если всё нормально, через месяц этот кластер можно удалить.
==================================
Сохраняем.
4. Создадим каталог для базы которую будем восстанавливать.
# mkdir /DATABASE/data
Примечание: Если мы всё делали по инструкции, то наша резервная копия состоит из двух архивов:
base.tar.gz - собственно резервная копия кластера
pg_wal.tar.gz - wal файлы. Этот архив нам поможет "докатить" все транзакции, которые были сделаны например в момент выполнения резервного копирования.
5. Переместим архив кластера в каталог (так быстрее) и разархивируем его.
# mv /BACKUP/db/20220829/base.tar.gz /DATABASE/data
# tar xzf /DATABASE/data/base.tar.gz
6. Переместим архив кластера обратно (так быстрее).
# mv /DATABASE/data/base.tar.gz /BACKUP/db/20220829
7. Создадим каталог для WAL файлов и разархивируем в него pg_wal.tar.gz.
# mkdir /DATABASE/pg_wal
# mv /BACKUP/db/20220829/pg_wal.tar.gz /DATABASE/pg_wal
# tar xzf /DATABASE/pg_wal/pg_wal.tar.gz
# mv /DATABASE/pg_wal/pg_wal.tar.gz /BACKUP/db/20220829
8. Просто так, запускать кластер не получится. Нам нужно сообщить СУБД, что мы восстанавливаем её из резервной копии. Для этого необходимо в каталоге кластера создать файл recovery.signal
# touch /DATABASE/data/recovery.signal
9. После всех манипуляций, необходимо всем каталогам с которыми будет работать Postgres установить владельца postgres.
# chown -R postgres:postgres /DATABASE
10. Откройте файл конфигурации кластера:
# mcedit /DATABASE/data/postgresql.conf
11. Долистайте до секции Archive Recovery, раскомментируйте restore_command и впишите:
restore_command = 'cp /DATABASE/pg_wal/%f %p'
Получится также как на картинке:
Сохраните файл.
12. Запускаем кластер
# service postgresql-12 start
Он немного подумает и запустится.
13. Проверяем, что всё хорошо.
# psql -U postgres
postgres#\l+
Смотрим, что базы на месте и они не пусты.
14. Кластер восстановлен. Чистим за собой.
# rm -rf /DATABASE/pg_wal
Идеи, баги, вопросы?
Сообщи нам t.me/screensquid