Инструменты для создания резервной копии ECCM представляют из себя набор bash-скриптов для автоматического/ручного создания резервных копий PostgreSQL-базы ECCM внутри Docker-контейнера и файлов конфигурации ECCM, с логированием и возможностью запуска по расписанию с помощью "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, setup-cron-backup.sh) поддерживают следующие флаги:
| Флаг | Назначение |
|---|---|
--all (используется по умолчанию) | Резервная копия БД и файлов конфигурации |
| --database | Резервная копия БД |
| --configs | Резервная копия файлов конфигурации |
Для корректной работы скрипта создания резервной копии (backup.sh) необходимо определить следующие переменные окружения:
| Переменная | Назначение | Обязательна | Значение по умолчанию |
|---|---|---|---|
ECCM_DATABASE | Название базы данных ECCM | При использовании флагов --all, --database | - |
POSTGRES_HOST | Хост PostgreSQL-сервера | При использовании флагов --all, --database | - |
POSTGRES_PORT | Порт PostgreSQL | Нет | '5432' |
ROOT_POSTGRES_USER | PostgreSQL-пользователь с правами на dump | При использовании флагов --all, --database | - |
ROOT_POSTGRES_PASSWORD | Пароль к PostgreSQL | При использовании флагов --all, --database | - |
CONFIG_DIR | Путь к директории с файлами конфигурации ECCM | При использовании флагов --all, --configs | - |
BACKUPS_DIR | Путь к директории для резервных копий | При использовании флагов --all, --database | '/tmp/backups' |
BACKUP_LOG | Путь к лог-файлу | Нет | '/tmp/backups/log/eccm_backup.log' |
BACKUP_CRON | Cron-выражение для периодичности резервного копирования | Да | - |
MAX_BACKUPS_COUNT | Количество резервных копий после ротации | Нет | 'не ограничено' |
Для корректной работы скрипта создания резервной копии с задаваемой периодичностью (setup-cron-backup.sh) необходимо дополнительно определить следующие переменные окружения:
| Переменная | Назначение | Обязательна | Значение по умолчанию |
|---|---|---|---|
BACKUP_CRON | Cron-выражение для периодичности резервного копирования | Да | - |
Во избежание потери файлов резервных копий при перезагрузке сервера рекомендуется изменить значения по умолчанию для переменных 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="host" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" BACKUPS_DIR="/tmp/backups" CONFIG_DIR="/eccm" /bin/bash ./backup.sh
Для того чтобы настроить запуск скрипта создания резервной копии по заданному расписанию, можно использовать следующую команду:
ECCM_DATABASE="eccm" POSTGRES_HOST="host" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" BACKUP_CRON="0 2 * * *" BACKUPS_DIR="/tmp/backups" CONFIG_DIR="/eccm" /bin/bash ./setup-cron-backup.sh
Восстановление ECCM из резервной копии
Скрипт восстановления из резервной копии (restore.sh) предназначен для восстановления базы данных ECCM и/или файлов конфигурации из ранее созданной резервной копии. Работает в среде Docker с PostgreSQL и поддержкой TimescaleDB. Для корректной работы скрипта восстановления из резервной копии необходимо определить следующие переменные окружения:
| Переменная | Назначение | Обязательна | Значение по умолчанию |
|---|---|---|---|
ECCM_DATABASE | Название базы данных для восстановления | При использовании флагов --all, --database | - |
POSTGRES_HOST | Хост PostgreSQL-сервера | При использовании флагов --all, --database | - |
POSTGRES_PORT | Порт PostgreSQL | Нет | '5432' |
ROOT_POSTGRES_USER | PostgreSQL-пользователь с правами на восстановление | При использовании флагов --all, --database | - |
ROOT_POSTGRES_PASSWORD | Пароль пользователя PostgreSQL | При использовании флагов --all, --database | - |
CONFIG_DIR | Директория для восстановления файлов конфигурации | При использовании флагов --all, --configs | |
BACKUPS_DIR | Директория для поиска резервной копии (если не указан файл) | Нет | `/tmp/backups` |
RESTORE_LOG | Путь к лог-файлу восстановления | Нет | '/tmp/restore/log/eccm_restore.log' |
Во избежание потери лог-файлов при перезагрузке сервера рекомендуется изменить значение по умолчанию для переменной RESTORE_LOG.
Произвести восстановление из резервной копии можно:
1. из конкретного файла резервной копии;
2. из последней резервной копии.
Результаты работы скрипта сохраняются в файл $RESTORE_LOG.
Для восстановления из конкретного файла резервной копии используется флаг -f с последующим указанием расположения $BACKUPS_DIR/имя_резервной_копии.dump:
Перед выполнением восстановления скрипт останавливает работу ECCM.
ECCM_DATABASE="eccm" POSTGRES_HOST="host" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" CONFIG_DIR="/eccm" /bin/bash ./restore.sh -f /tmp/backups/eccm_2025-06-02_12-00-00_123.dump
Для восстановления из последнего файла резервной копии необходимо указать переменную $BACKUPS_DIR:
ECCM_DATABASE="eccm" POSTGRES_HOST="host" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" BACKUPS_DIR="/tmp/backups" CONFIG_DIR="/eccm" /bin/bash ./restore.sh
После восстановления необходимо запустить контейнеры:
./compose-tools.sh --start <ip_address>