Бэкап базы postgresql создается SQL дампами также как в MySQL. Есть и другие способы, но только этот гарантирует что из бэкапа потом удастся восстановить данные.
Рассмотрим как делать бэкап базы postgresql, потребуется выполнить две операции:
- создание sql дампа с проверкой успешности его создания
- копирование sql дампа в определенный каталог или на отдельный сервер бэкапов
Принципы хранения данных SQL баз
Когда сервис Postgresql или MySQL установлен и работает — его данные хранятся на диске сервера в виде служебных файлов.
В MySQL файлы можно найти в директории /var/lib/mysql, в Postgresql путь к директории можно посмотреть выполнив в консоли такую команду
sudo -u postgres psql -c "show data_directory;"
Пример вывода и содержимое каталога с данными на скриншоте:
Бэкап базы postgresql можно получить копируя эти файлы и при необходимости восстанавливая их на сервере. Но у такого подхода есть большой минус.
Для SQL баз данных важна консистентность
Пока сервис запущен с базами можно работать через консоль сервера или через веб-интерфейс.
При системных сбоях эти файлы могут быть повреждены — в результате базу будет очень сложно восстановить. Из-за того что повреждаются файлы сервис с ними после восстановления может не запускаться.
Выходом и стандартом для SQL баз является периодическое и автоматизированное создание SQL дампов баз.
Затем файлы дампов копируют на другую машину или в хранилище бэкапов.
Состояние базы фиксируется на момент создания дампа, на выходе получается текстовый файл.
Его удобно копировать, он не повреждается при сбоях как файлы базы.
Повреждение происходит потому что файлы на диске используются активным процессом, текстовый файл sql дампа процессом postgresql не используется.
При необходимости sql дамп можно загрузить в базу на другом сервере или на этом же после переустановки postgresql.
Как создать бэкап базы postgresql вручную и автомтизированно
Бэкап базы Postgres созадется на сервере, на котором работает служба:
pg_dump DATABASE_NAME > dump.sql
Команда выполняется от имени системного пользователя postgres (подробнее).
Её можно выполнять как вручную, так и скриптом представляющим собой компонент системы автоматизации или резервного копирования.
В примере видно как созданный дамп проверили с помощью утилиты tail.
Сообщение PostgreSQL database dump complete говорит о том что процесс успешно завершился и ошибок нет.
Как копировать sql дампы баз postgres
На том же или на втором сервере, выполняющем роль сервера бэкапов по CRON можно запускать скрипт, который будет скачивать дампы базы.
Пример команды (с сервера с postgres)
rsync -av /var/DUMP_FOLDER [email protected]:/backups/dumps
С одной машины на другую при этом должна быть возможность зайти по SSH ключу, без запроса пароля.
Команды добавляются в планировщик задач CRON. Первая создаёт дампы каждой базы и размещает их в определенном каталоге. Вторая копирует дампы на другой сервер или в хранилище бэкапов.
Опционально можно добавить логику проверяющую успешность создания дампа.