﻿# Резервное копирование и восстановление баз данных: утилита Elma365-Backupper

> [HTML Version](database-backup-and-recovery.html)

**Elma365-Backupper** — утилита, позволяющая осуществлять резервное копирование данных приложения ELMA365.

Резервное копирование ELMA365 должно выполняться в составе:

- PostgreSQL — в базе данных хранятся основные данные системы: пользователи, элементы приложений, настройки приложений, разделов, процессы, страницы, виджеты, задачи, события и другие настройки конфигурации;

- MongoDB — в базе данных хранятся неструктурированные системные настройки, данные чатов и ленты;

- S3 Object Storage — в объектном хранилище находятся загружаемые и создаваемые в ELMA365 файлы любого типа и объёма, например, документы, фотографии, аудио- и видеофайлы.

Утилита **Elma365-Backupper** совместима со следующими операционными системами: Debian 11, Debian 12, Debian 13, Ubuntu 22.04, Ubuntu 24.04, Ubuntu 26.04, Oracle Linux 9.

Резервное копирование и восстановление баз данных состоит из четырёх этапов:

1. [Установка Elma365-Backupper](#install-elma365-backupper).

2. [Настройка Elma365-Backupper](#setting-elma365-backupper).

3. [Резервное копирование баз данных](#backup-database).

4. [Восстановление баз данных](#recovery-database).

Вы также можете использовать [интерактивный режим](#dialog-mode) для резервного копирования и восстановления баз данных. Он заменяет выполнение этапов 3 и 4, указанных выше.

## Шаг 1. Установка Elma365-Backupper

1. Установите пакеты:

````
sudo apt install -y apt-transport-https ca-certificates curl gpg sudo lsb-release

2. ````
Импортируйте ключи:

````
sudo curl -fsSL https://repo.elma365.tech/deb/elma365-keyring.gpg | gpg --dearmor > /etc/apt/trusted.gpg.d/elma365-keyring.gpg

3. ````
Добавьте репозиторий ELMA365:

````
echo "deb \[arch=amd64\] https://repo.elma365.tech/deb \$(lsb\_release -cs) stable" | sudo tee /etc/apt/sources.list.d/elma365.list  
sudo apt update

4. ````
Установите **Elma365-Backupper**:

````
sudo apt install elma365-backupper

````
Установка для Red Hat-подобных операционных систем

1. Добавьте репозиторий ELMA365:

````
cat <<EOF | sudo tee /etc/yum.repos.d/elma365.repo  
\[elma365\_repo\]  
name=ELMA365 Repository  
baseurl=https://repo.elma365.tech/rpm/ol/releases/9.2/x86\_64  
gpgcheck=1  
gpgkey=https://repo.elma365.tech/rpm/elma365-keyring.gpg  
EOF

````
  
Обратите внимание, rpm-пакет доступен только для Red Hat Enterprise Linux версии 9.

2. Установите **Elma365-Backupper**:

````
dnf install elma365-backupper
````

## ````
Шаг 2. Настройка Elma365-Backupper

1. Откройте файл конфигурации \[OBJECT\]:

````
nano /opt/elma365/backupper/etc/config

2. ````
В открывшемся файле заполните параметры:

- \[OBJECT\] — путь до файла kubeconfig, задаётся для выбора кластера и связи с API-сервером кластера Kubernetes. Если параметр не задан, будет использоваться значение \[OBJECT\];

- \[OBJECT\] — директория, в которую сохранится резервная копия. Доступные варианты директорий: 

	- \[OBJECT\] — резервная копия сохранится в локальную файловую систему по пути, указанному в параметре \[OBJECT\];

	- \[OBJECT\] — резервная копия сохранится в S3 хранилище. Для установления соединения будут использоваться значения, заданные в параметрах \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\];

- \[OBJECT\] — namespace, в котором установлено приложение ELMA365;

- \[OBJECT\] — namespace, в котором установлены встроенные базы данных, развёрнутые в Kubernetes-кластере с помощью статьи [«Подготовка встроенных баз данных»](embedded-databases-settings.md).

Убедитесь, что порты 7000, 7001, 7002 свободны и могут быть использованы для переадресации портов для доступа к базам данных в Kubernetes-кластере. При необходимости переопределить порты можно в параметрах \[OBJECT\], \[OBJECT\], \[OBJECT\];

- \[OBJECT\] — период хранения резервных копий в днях. Резервные копии старше указанного значения будут удаляться при выполнении очередного резервного копирования;

- \[OBJECT\] — директория для хранения временных резервных копий. В директории должно быть достаточно места для хранения одной резервной копии. В указанной директории происходит сборка резервной копии, затем файлы резервной копии перемещаются в целевое место хранения, указанное в параметре \[OBJECT\].

Пример заполненного файла

````
  
\# Параметр KUBECONFIG — путь до файла kubeconfig, используется для подключения к Kubernetes-кластеру  
KUBECONFIG=""  
\# Параметр BACKUP\_DST — директория, в которую сохранится резервная копия  
\# Доступные варианты: s3, filesystem  
\# s3 — резервная копия будет сохранена на S3 хранилище  
\# filesystem — резервная копия будет сохранена на локальную файловую систему по пути указанному в параметре BACKUP\_PATH  
BACKUP\_DST=filesystem  
  
\# namespace, в который установлено приложение ELMA365  
K8S\_NS\_APP=elma365  
\# namespace, в который установлены встроенные базы данных  
K8S\_NS\_DBS=elma365-dbs  
  
\# период хранения резервной копии в днях  
BACKUP\_LIFE=7  
  
\# Директория для хранения временных резервных копий  
TMP\_DIR="/opt/elma365/backupper/tmp"  
\# Директория, в которую будут сохраняться резервные копии  
BACKUP\_PATH="/opt/elma365/backupper/backup/"  
  
\# Параметры для настройки подключения к S3 хранилищу, в которое будут сохраняться резервные копии  
\# S3\_BUCKET\_NAME — наименование бакета, в который будут сохраняться резервные копии. Зарезервированные (недоступные) наименования бакетов имеют формат (маска) "s3elma365\*"  
\# S3\_HOST — URL адрес S3 хранилища  
\# S3\_PORT — порт для подключения к S3 хранилищу  
\# S3\_ROOT\_USER — наименование пользователя, имеющего права на чтение или запись в бакет, указанный в параметре S3\_BUCKET\_NAME  
\# S3\_ROOT\_PASSWORD — пароль для пользователя S3\_ROOT\_USER  
\# S3\_SSL\_ENABLED — используется ли шифрование при подключении к внешнему S3 хранилищу (true/false)  
S3\_BUCKET\_NAME=""  
S3\_HOST=""  
S3\_PORT=""  
S3\_ROOT\_USER=""  
S3\_ROOT\_PASSWORD=""  
S3\_SSL\_ENABLED=true  
  
\# Параметры переадресации портов для доступа к базам данных в кластере Kubernetes  
\# В Kubernetes кластер будут переадресованы локальные порты, указанные в параметрах:  
\# S3\_SRC\_PORT — порт для подключения к S3 хранилищу  
\# PG\_SRC\_PORT — порт для подключения к PostgreSQL  
\# MONGO\_SRC\_PORT — порт для подключения к MongoDB  
S3\_SRC\_PORT=7000  
PG\_SRC\_PORT=7001  
MONGO\_SRC\_PORT=7002
````

## ````
Шаг 3. Резервное копирование баз данных

Вы можете выполнить резервное копирование и восстановление баз данных с помощью команд, указанных в шагах 3 и 4, или использовать [интерактивный режим](#dialog-mode).

````
Начало внимание

````
Во время создания резервной копии сервисы ELMA365 останавливаются, приложение становится недоступным.

````
Конец внимание

````
Выполните резервное копирование баз данных приложения ELMA365:

````
elma365-backupper backup <<db-type>>

````
где \[OBJECT\] — наименование базы данных, для которой необходимо выполнить резервное копирование. Варианты значений аргумента:

- \[OBJECT\] — MongoDB;

- \[OBJECT\] — PostgreSQL;

- \[OBJECT\] — S3-хранилище;

- \[OBJECT\] — все базы данных (MongoDB, PostgreSQL, S3).  
  
Вы также можете комбинировать значения `mongo`, `postgres` и `s3`, указав их через запятую, чтобы задать две базы данных. Например, `postgres,s3` или `mongo,postgres`.

Дополнительные ключи команды backup

1. \[OBJECT\] — резервное копирование баз данных в локальную директорию. При использовании ключа в параметрах, указанных в конфигурационном файле, устанавливаются значения  \[OBJECT\]=\[OBJECT\] и \[OBJECT\]=«путь, переданный аргументом». 

Пример команды:

````
  
elma365-backupper backup <<db-type>> --storage /opt/elma365/backupper/backup/

2. ````
\[OBJECT\] — переопределение пути до файла конфигурации **Elma365-Backupper**. Путь по умолчанию: \[OBJECT\]. 

Пример команды:

````
  
elma365-backupper backup <<db-type>> --config /opt/elma365/backupper/etc/config
````

## ````
Шаг 4. Восстановление баз данных

Вы можете восстановить базы данных из последней или определённой версии резервной копии.

````
Начало внимание

````
Перед восстановлением данных из резервной копии очистите базы данных и S3 хранилище или воспользуйтесь ключом \[OBJECT\].

````
Конец внимание

````
Подробнее о подготовке БД к восстановлению читайте в статьях [«PostgreSQL»](postgresql.md#prepare-to-recovery) и [«MongoDB»](mongodb.md#prepare-to-recovery).

### Восстановление из последней резервной копии

Выполните команду:

````
elma365-backupper restore <<db-type>>

````
где \[OBJECT\] — наименование базы данных, для которой нужно получить список резервных копий. Варианты значений аргумента:

- \[OBJECT\] — MongoDB;

- \[OBJECT\] — PostgreSQL;

- \[OBJECT\] — S3-хранилище;

- \[OBJECT\] — все базы данных (MongoDB, PostgreSQL, S3).  
  
Вы также можете комбинировать значения `mongo`, `postgres` и `s3`, указав их через запятую, чтобы задать две базы данных. Например, `postgres,s3` или `mongo,postgres`.

С помощью этой команды вы сможете восстановить базы данных на последнюю резервную копию, найденную в хранилище. 

### Восстановление из определённой резервной копии

1. Получите список резервных копий из хранилища:

````
elma365-backupper backup-list <<db-type>>

````
где \[OBJECT\] — наименование базы данных, для которой нужно получить список резервных копий. Варианты значений аргумента:

- \[OBJECT\] — MongoDB;

- \[OBJECT\] — PostgreSQL;

- \[OBJECT\] — S3-хранилище;

- \[OBJECT\] — все базы данных (MongoDB, PostgreSQL, S3).  
  
Вы также можете комбинировать значения `mongo`, `postgres` и `s3`, указав их через запятую, чтобы задать две базы данных. Например, `postgres,s3` или `mongo,postgres`.

Дополнительные ключи команды backup-list

1. \[OBJECT\] — поиск резервных копий баз данных в локальной директории. 

Пример команды:

````
  
elma365-backupper backup <<db-type>> --storage /opt/elma365/backupper/backup/

2. ````
\[OBJECT\] — переопределение пути до файла конфигурации **Elma365-Backupper**, путь по умолчанию: \[OBJECT\]. 

Пример команды:

````
  
elma365-backupper backup <<db-type>> --config /opt/elma365/backupper/etc/config
````

````
В зависимости от способа хранения резервных копий, указанного в параметре \[OBJECT\], команда backup-list вернёт:

- при указании значения \[OBJECT\] — наименования директорий с дампами в S3-хранилище;

- при указании значения \[OBJECT\] — абсолютные пути до директорий с дампами в файловой системе.

2. Выполните восстановление баз данных из определённой резервной копии:

````
elma365-backupper restore <<db-type>> --backup-path /path/to/backup

````
Загрузка резервной копии для восстановления баз данных происходит из хранилища, указанного в параметре \[OBJECT\]:

- если указано S3-хранилище:

````
elma365-backupper restore <<db-type>> --backup-path ELMA365\_YYYY.MM.DD-HH.MI.SS

- ````
если указана локальная директория:

````
elma365-backupper restore <<db-type>> --backup-path /opt/elma365/backupper/backup/ELMA365\_YYYY.MM.DD-HH.MI.SS/

````
Дополнительные ключи команды restore

1. \[OBJECT\] — флаг для автоматической очистки БД перед восстановлением резервной копии. 

Пример команды:

````
  
elma365-backupper restore <<db-type>> --backup-path /path/to/backup --cleanup-databases

2. ````
\[OBJECT\] — переопределение пути до файла конфигурации **Elma365-Backupper**, путь по умолчанию: \[OBJECT\]. 

Пример команды:

````
  
elma365-backupper restore <<db-type>> --backup-path /path/to/backup --config /opt/elma365/backupper/etc/config
````

````


## Интерактивный режим

Вы можете работать с утилитой **Elma365-Backupper** в интерактивном режиме вместо выполнения этапов 3 и 4, указанных выше. Для этого запустите скрипт с помощью команды:



````
elma365-backupper

````
В результате отобразятся доступные операции:

````
\### Select an option ###  
\> backup  
   restore  
   backup-list  
   backup-manager  
\[ENTER\] - confirm

````
 

Выберите команду, используя на клавиатуре клавиши: **Вниз** и **Вверх** — для перемещения по списку, **Пробел** — для выбора и **Enter** — применить команду. Затем следуйте инструкциям, указанным в подсказках.

