#postgresql, #backups
👩💻 Администрируем PostgreSQL. Часть I: Бэкапы via built-in tools
Я люблю DBaaS. Они просты в настройке и эксплуатации, так как облачный провайдер берёт на себя большую часть ответственности, например задачи по репликации на Replica-хосты, созданию резервных копий или соответствию законам.
🤔 Но представьте, что вам неожиданно дадут чистую ВМ и скажут: "Выкатывай в продакшен!" Страшно? Ну что же, го.
Запускаем слоника через docker compose (на проде так не делаем, т.к запускать StateFull приложения в контейнере - плохая затея)
https://pastebin.com/tMAH1pQ5
Подключаемся, создаём таблицу и заполняем её:
https://pastebin.com/tp6rVjPV
Теперь рассмотрим возможности для создания резервных копии.
1) SQL-дампы: pg_dump & pg_dumpall
При помощи pg_dump мы можем создать SQL-дамп для конкретной БД, тогда как с pg_dumpall - для всего кластера:
users_dump.sql будет содержать все команды, необходимые для восстановления базы данных.
❗️ Но тут не всё так идеально. Хотя база данных в момент создания дампа не блокируется, для достаточно "жирных" баз операции создания и восстановления из такого дампа могут занять достаточно большое время.
Восстановим базу данных на другом кластере:
⚙️ 2) Физический бэкап: pg_basebackup
🤓 pg_dump называют логическим бэкапом, так как он содержит SQL-команды. Для физического бэкапирования используется утилита pg_basebackup. Преимущество таких бэкапов над дампами в том, что создание через pg_basebackup будет в разы быстрее для большого кластера, чем через pg_dumpall.
🤠 Добавим базу данных replication и назначим dev_user все права:
🧐 Добавим в pg_hba.conf строчку, которая позволит подключаться к базе данных для создания резервной копии:
Создадим физический бэкап:
👣 Теперь пробросим только что созданный бэкап в restored контейнер:
🎩 Подключимся по psql к restored контейнеру и убедимся, что данные были восстановлены успешно:
Таким образом, PostgreSQL обладает огромным количеством утилит для создания резервных копии. Мы рассмотрели команды, идущие "из коробки". Но их хватает не всегда: про другие инструменты бэкапирования я напишу в следующем посте. Замечательных выходных! 🤟
Я люблю DBaaS. Они просты в настройке и эксплуатации, так как облачный провайдер берёт на себя большую часть ответственности, например задачи по репликации на Replica-хосты, созданию резервных копий или соответствию законам.
Запускаем слоника через docker compose (на проде так не делаем, т.к запускать StateFull приложения в контейнере - плохая затея)
https://pastebin.com/tMAH1pQ5
docker compose up -d
Подключаемся, создаём таблицу и заполняем её:
https://pastebin.com/tp6rVjPV
Теперь рассмотрим возможности для создания резервных копии.
1) SQL-дампы: pg_dump & pg_dumpall
При помощи pg_dump мы можем создать SQL-дамп для конкретной БД, тогда как с pg_dumpall - для всего кластера:
pg_dump \
--host=localhost \
--port=5432 \
--username=dev_user \
--password \
users > users_dump.sql
users_dump.sql будет содержать все команды, необходимые для восстановления базы данных.
Восстановим базу данных на другом кластере:
psql \
--host=localhost \
--port=5433 \
--username=dev_user \
--password \
users < users_dump.sql
users=# select count(*) from users;
count
-------
14
(1 row)
users=# create database replication;
CREATE DATABASE
users=# grant all privileges on database replication to dev_user;
GRANT
host replication dev_user 0.0.0.0/0 password
Создадим физический бэкап:
pg_basebackup --host=localhost --port=5432 --username=dev_user -D ./main-postgres-data
services:
main:
[...]
restored:
[...]
volumes:
- ./main-postgres-data:/var/lib/postgresql/data
psql \
--host=localhost \
--port=5433 \
--username=dev_user \
--password \
users
Password:
psql (14.11 (Ubuntu 14.11-0ubuntu0.22.04.1), server 14.1)
Type "help" for help.
users=# select count(*) from users;
count
-------
14
(1 row)
Таким образом, PostgreSQL обладает огромным количеством утилит для создания резервных копии. Мы рассмотрели команды, идущие "из коробки". Но их хватает не всегда: про другие инструменты бэкапирования я напишу в следующем посте. Замечательных выходных! 🤟
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳3👍1