Резервне копіювання бази даних PostgreSQL в Docker

База даних є критично важливою складовою будь-якого додатку чи веб-сайту. Для забезпечення надійності і безпеки важливо регулярно створювати резервні копії. Багато різних провайдерів hosting мають та роблять резервні копії протягом певного часу, але якщо у вас є свій сервер тому потрібно створювати резервні копії, звісно можна робити через ctr+c ctr+v, але що робити якщо у вас база даних знаходиться в docker, копіювати цілий докер? Тому ми розглянемо, як виконувати резервне копіювання бази даних для прикладу PostgresqL, яка працює в контейнері docker. Покажу як зробити копію, або з копії завантажити.


Створення резервної копії бази даних


Для початку нам потрібно знати назву докера за допомогою команди:

docker ps

Після того як в нас є його id або назва потрібно зайти в докер та зробити копію бази, де робиться дуже легко за допомогою декілька команд

    usr/bin/docker exec -u postgres "docker_name" pg_dump "database_name" -f /var/lib/postgresql/data/pgdata/`date +%F_%H%M`.sql

Цієї команди достатньо для зроблення резевної копії в контейнері


Створення тестової бази даних з копії

Буває багато різних ситуацій коли потрібно зробити тестову базу, або зробити дубль бази

Для цього потрібно зайти в базу даних

Можна зайти за допомогою різних клієнтів або через термінал, кому як зручно та створити нову базу даних і перенести з файлу який ми створили базу в дану базу за допомогою командного рядка можна так
сreatedb test
psql test < data/pgdata/2024-02-24_1449.sql 
Створюємо спочатку базу за допомогою createdb та після чого повідомляємо що в дану базу потрібно внести дані з sql файла.

Обов'язково після заповненя бази даними потрібно налаштувати права доступу до бази, для виключення конфілктів та добавити права конкретному користувачу.
psql "username"
alter database "database_name" owner to "username";

Тепер, коли у нас є копія бази даних, ми можемо здійснювати різноманітні маніпуляції, не хвилюючись, що дані можуть бути втрачені. Ми маємо тестову базу та навіть резервну копію, тому в разі необхідності ми можемо відновити нашу робочу базу даних


Автоматичне створення резервної копії

Для автоматичного створення можна виконати багато різних способів, я вибрав написання bash скрипта який буде робити резервну копію в контейнері та копіювати на сервер даний файл, також можна помістити даних скрипт в crontab та його запускати автоматично, або різними іншими способами які для кого зручніші

Приклад мого bash скрипту для створення резервної копії бази даних


#!/bin/bash

# Ім'я бази даних

DB_NAME="database_name"



# Ім'я користувача бази даних

DB_USER="username"





# Ім'я контейнера PostgreSQL

CONTAINER_NAME="docker_name"



# Визначення шляху для зберігання резервних копій

BACKUP_PATH="/home/username/backup"



# Формат дати та часу для імені файлу

DATE_FORMAT=$(date +"%Y-%m-%d_%H%M")



# Виконання резервного копіювання



docker exec -u postgres $CONTAINER_NAME pg_dump $DB_NAME -f /var/lib/postgresql/data/$DATE_FORMAT.sql



# Копіювання файлу резервної копії на локальну машину

docker cp $CONTAINER_NAME:/var/lib/postgresql/data/$DATE_FORMAT.sql $BACKUP_PATH



echo "Backup completed: $BACKUP_PATH/$DATE_FORMAT.sql"


Висновки

Регулярне створення резервних копій баз даних є критично важливою частиною стратегії забезпечення безпеки та надійності. Використання Docker дозволяє легко виконувати резервне копіювання та відновлення баз даних, а також автоматизувати цей процес за допомогою скриптів та планувальника задач.