Инструменты для создания резервной копии базы данных ECCM представляют из себя набор bash-скриптов для автоматического/ручного создания резервных копий PostgreSQL-базы ECCM внутри Docker-контейнера, с логированием и возможностью запуска по расписанию с помощью "cron":

  • postgres/scripts/backup.sh — скрипт для создания резервной копии БД;
  • postgres/scripts/setup-cron-backup.sh — скрипт, позволяющий автоматизировать вызов backup.sh с задаваемой периодичностью с помощью cron;
  • postgres/scripts/restore.sh — скрипт для восстановления БД из резервной копии;
  • postgres/scripts/liblog.sh — библиотека для выполнения операций резервного копирования и восстановления PostgreSQL;
  • postgres/scripts/libbackup.sh — библиотека для логирования с цветным выводом и записью в файл.

Создание резервной копии базы данных ECCM

Для корректной работы скрипта создания резервной копии (backup.sh) необходимо определить следующие переменные окружения:

ПеременнаяНазначениеОбязательнаЗначение по умолчанию

ECCM_DATABASE

Название базы данных ECCM

Да-

POSTGRES_HOST

Хост PostgreSQL-сервера

Да-

POSTGRES_PORT

Порт PostgreSQL

Нет'5432'

ROOT_POSTGRES_USER

PostgreSQL-пользователь с правами на dump

Да-

ROOT_POSTGRES_PASSWORD

Пароль к PostgreSQL

Да-

BACKUPS_DIR

Путь к директории для резервных копий

Нет '/tmp/backups'

BACKUP_LOG

Путь к лог-файлу

Нет '/tmp/backups/log/eccm_backup.log'

BACKUP_CRON

Cron-выражение для периодичности резервного копирования

Да-

MAX_BACKUPS_COUNT

Количество резервных копий после ротации

Нет 'не ограничено'


Во избежание потери файлов резервных копий при перезагрузке сервера рекомендуется изменить значения по умолчанию для переменных BACKUPS_DIR и BACKUP_LOG.

Создать резервную копию БД можно двумя способами:

1. запустить скрипт backup.sh вручную;

2. создать cron-task для запуска скрипта backup.sh с заданным расписанием.

Результатом работы будет сжатый файл .dump, размещенный в директории $BACKUPS_DIR. При указании переменной $MAX_BACKUPS_COUNT после вызова ./backup.sh в директории $BACKUPS_DIR останется только ($MAX_BACKUPS_COUNT) последних резервных копий, а более старые — автоматически удалятся.

Так как crontab не может самостоятельно создавать директории, перед запуском скрипта необходимо создать директории из BACKUPS_DIR и передать в команду.


Для того чтобы запустить скрипт вручную, можно использовать следующую команду:

Пример ручного запуска скрипта
ECCM_DATABASE="eccm" POSTGRES_HOST="localhost" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" BACKUPS_DIR="/tmp/backups" /bin/bash ./backup.sh

Для того чтобы настроить запуск скрипта создания резервной копии по заданному расписанию, можно использовать следующую команду:

Пример настройки запуска скрипта по расписанию (каждый день в 02:00)
ECCM_DATABASE="eccm" POSTGRES_HOST="localhost" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" BACKUP_CRON="0 2 * * *" BACKUPS_DIR="/tmp/backups" /bin/bash ./setup-cron-backup.sh


Восстановление базы данных ECCM из резервной копии

Скрипт восстановления БД из резервной копии (restore.sh) предназначен для восстановления базы данных ECCM из ранее созданной резервной копии. Работает в среде Docker с PostgreSQL и поддержкой TimescaleDB. Для корректной работы скрипта восстановления из резервной копии необходимо определить следующие переменные окружения:

ПеременнаяНазначениеОбязательнаЗначение по умолчанию

ECCM_DATABASE

Название базы данных для восстановления

Да-

POSTGRES_HOST

Хост PostgreSQL-сервера

Да-

POSTGRES_PORT

Порт PostgreSQL

Нет '5432'

ROOT_POSTGRES_USER

PostgreSQL-пользователь с правами на восстановление

Да-

ROOT_POSTGRES_PASSWORD

Пароль пользователя PostgreSQL

Да-

BACKUPS_DIR

Директория для поиска резервной копии (если не указан файл)

Нет`/tmp/backups`

RESTORE_LOG

Путь к лог-файлу восстановления

Нет '/tmp/restore/log/eccm_restore.log'


Во избежание потери лог-файлов при перезагрузке сервера рекомендуется изменить значение по умолчанию для переменной RESTORE_LOG.

Произвести восстановление базы данных из резервной копии можно: 

1. из конкретного файла резервной копии;

2. из последней резервной копии. 

Результаты работы скрипта сохраняются в файл $RESTORE_LOG.


Для восстановления из конкретного файла резервной копии используется флаг -f с последующим указанием расположения $BACKUPS_DIR/имя_резервной_копии.dump:

Для корректной работы скрипта должен быть запущен ECCM или контейнер postgres.

Пример восстановления БД из конкретного файла резервной копии
ECCM_DATABASE="eccm" POSTGRES_HOST="localhost" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" /bin/bash ./restore.sh -f /tmp/backups/eccm_2025-06-02_12-00-00_123.dump

Для восстановления из последнего файла резервной копии необходимо указать переменную $BACKUPS_DIR или использовать флаг -d с последующим указанием директории с резервными копиями:

Пример восстановления БД из последнего файла резервной копии с использованием переменной окружения
ECCM_DATABASE="eccm" POSTGRES_HOST="localhost" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" BACKUPS_DIR="/tmp/backups" /bin/bash ./restore.sh
Пример восстановления БД из последнего файла резервной копии с использованием флага -d
ECCM_DATABASE="eccm" POSTGRES_HOST="localhost" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" /bin/bash ./restore.sh -d /tmp/backups


После восстановления необходимо перезапустить контейнеры: 

Перезапуск контейнеров
./compose-tools.sh --stop
./compose-tools.sh --start <ip_address> 
  • Нет меток