Инструменты для создания резервной копии базы данных ECCM представляют из себя набор bash-скриптов для автоматического/ручного создания резервных копий PostgreSQL-базы ECCM внутри Docker-контейнера, с логированием и возможностью запуска по расписанию с помощью "cron":
Для корректной работы скрипта создания резервной копии (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 | Количество резервных копий после ротации | Нет | 'не ограничено' |
Во избежание потери файлов резервных копий при перезагрузке сервера рекомендуется изменить значения по умолчанию для переменных |
Создать резервную копию БД можно двумя способами:
1. запустить скрипт backup.sh вручную;
2. создать cron-task для запуска скрипта backup.sh с заданным расписанием.
Результатом работы будет сжатый файл .dump, размещенный в директории $BACKUPS_DIR. При указании переменной $MAX_BACKUPS_COUNT после вызова ./backup.sh в директории $BACKUPS_DIR останется только ($MAX_BACKUPS_COUNT) последних резервных копий, а более старые — автоматически удалятся.
Так как crontab не может самостоятельно создавать директории, перед запуском скрипта необходимо создать директории из |
Для того чтобы запустить скрипт вручную, можно использовать следующую команду:
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 |
Для того чтобы настроить запуск скрипта создания резервной копии по заданному расписанию, можно использовать следующую команду:
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 |
Скрипт восстановления БД из резервной копии (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' |
Во избежание потери лог-файлов при перезагрузке сервера рекомендуется изменить значение по умолчанию для переменной |
Произвести восстановление базы данных из резервной копии можно:
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 |
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> |