Как безопасно сделать резервную копию базы данных Postgres с помощью Docker и Cron
27 апреля 2023 г.Вы устали от ручного резервного копирования базы данных Postgres и беспокоитесь о безопасности ваших конфиденциальных данных? Ну, не беспокойтесь больше! В этой статье я расскажу вам, как использовать Docker и Cron для автоматического резервного копирования вашей базы данных Postgres, обеспечивая безопасность ваших данных.
Вот файл Docker Compose, который мы будем использовать для настройки контейнера PostgreSQL и контейнера резервного копирования:
version: '3.8'
services:
db-postgresql:
image: postgres:13
restart: always
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: P@ASSW0RD654
POSTGRES_DB: bitbucket
PGDATA: /var/lib/postgresql/data/pgdata
POSTGRES_SYNCHRONOUS_COMMIT: 'on'
POSTGRES_WAL_LEVEL: 'replica'
ports:
- published: 7649
target: 5432
volumes:
- postgresql_data:/var/lib/postgresql/data/pgdata
backup:
image: postgres:13
depends_on:
- db-postgresql
volumes:
- ./backup:/backup
command: >
bash -c "while true; do
PGPASSWORD=$$POSTGRES_PASSWORD pg_dump -h db-postgresql -U $$POSTGRES_USER -Fc $$POSTGRES_DB > /backup/$$(date +%Y-%m-%d-%H-%M-%S).dump
echo ""Backup done at $$(date +%Y-%m-%d_%H:%M:%S)""
ls -1 /backup/*.dump | head -n -2 | xargs rm -f
sleep 86400
done"
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: P@ASSW0RD654
POSTGRES_DB: bitbucket
volumes:
postgresql_data:
external: true
Сначала давайте взглянем на код. У нас определены две службы: db-postgresql
, которая запускает базу данных Postgres, и backup
, которая отвечает за резервное копирование базы данных.
Служба db-postgresql
использует официальный образ Postgres с указанной версией 13. Мы также определяем некоторые переменные среды, включая имя базы данных, имя пользователя и пароль.
Обратите внимание, что мы используем надежный пароль, поэтому обязательно выберите безопасный пароль для собственной настройки!
Служба backup
зависит от службы db-postgresql
, а это означает, что она не запустится, пока не будет запущена и запущена база данных. Здесь мы также используем образ Postgres с указанной версией 13.
Теперь давайте подробнее рассмотрим команду резервного копирования. Мы используем сценарий Bash для резервного копирования базы данных, который запускается по расписанию с помощью Cron. Скрипт запускается каждые 24 часа благодаря команде sleep 86400
.
Сценарий резервного копирования использует команду pg_dump
для создания дампа базы данных в файл. Мы также включаем метку времени в имя файла, которое генерируется с помощью команды date
. Это означает, что каждая резервная копия будет иметь уникальное имя файла, что упрощает отслеживание нескольких резервных копий.
Мы также удаляем старые резервные копии с помощью команд ls
, head
и xargs
. Это гарантирует, что у нас не закончится место на диске из-за старых резервных копий.
Наконец, мы подключаем том к службе backup
, которая сопоставляется с каталогом ./backup
на хост-компьютере. Это означает, что файлы резервных копий будут храниться на хост-компьютере, а не в контейнере.
Вот и все! С этой настройкой вы можете быть уверены, что ваша база данных Postgres регулярно и надежно резервируется. Независимо от того, работаете ли вы над личным проектом или над производственной системой, наличие надежной стратегии резервного копирования необходимо для обеспечения безопасности и целостности ваших данных.
Так почему бы не попробовать эту настройку и насладиться душевным спокойствием, которое дает уверенность в том, что ваши данные защищены?
Оригинал