Как безопасно сделать резервную копию базы данных Postgres с помощью Docker и Cron

Как безопасно сделать резервную копию базы данных 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 регулярно и надежно резервируется. Независимо от того, работаете ли вы над личным проектом или над производственной системой, наличие надежной стратегии резервного копирования необходимо для обеспечения безопасности и целостности ваших данных.

Так почему бы не попробовать эту настройку и насладиться душевным спокойствием, которое дает уверенность в том, что ваши данные защищены?


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE