# Архивировние и восстановление БД через ClickHouse BACKUP/RESTORE

<p class="callout info">Информация, приведенная на данной странице, является разработкой команды pre-sales и/или community KUMA и **НЕ** является официальной рекомендацией вендора.</p>

<p class="callout danger">Данная инструкция проверена и актуальна только для версии KUMA 3.0.3.19</p>

---

### Описание

Данный метод позволяет выполнять локальное архивирование и восстановление партиций ClickHouse через встроенные механизмы BACKUP и RESTORE.

В статье описан пример ручного резервного копирования и восстановления на сервере в конфигурации All-in-One. При помощи скриптов данный подход может быть автоматизирован и распространен на распределенную конфигурацию.

<p class="callout warning">Всегда помните, если вы производите резервное копирование и/или архивирование и не проверяете корректность бэкапов, а также не пробуете их восстанавливать, существует вероятность, что вы не сможете восстановиться из резервной копии, когда это будет действительно необходимо.</p>

---

### Настройка хранилища

1\. Создать на сервере хранилища директорию для сохранения резервных копий, например, `/tmp/test_backup`

2\. Сделать владельцем директории пользователя kuma с помощью команды:

```bash
chown kuma:kuma /tmp/test_backup/
```

3\. Убедиться, что у пользователя kuma также есть права x и r на всех родительских директориях

4\. Перейти в Web-интерфейс KUMA на вкладку "активные сервисы".

5\. Открыть на редактирование требуемый сервис хранилища.

6\. В поле "Переопределение параметров ClickHouse" задать разрешенный путь для сохранения резервных копий

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/scaled-1680-/tOLimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/tOLimage.png)

```xml
<backups>
        <allowed_path>/tmp/test_backup/</allowed_path>
</backups>
```

7\. Сохранить сервис хранилища

8\. На вкладке "Активные сервисы" выбрать галочкой соответствующий сервис и нажать перезапустить в верхнем меню для применения настроек

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/scaled-1680-/EnNimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/EnNimage.png)

<details id="bkmrk-%D0%9A%D0%B0%D0%BA-%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C%2C-%D1%87%D1%82%D0%BE-%D0%B8"><summary>Как проверить, что изменения применились</summary>

1\. Перейдите в консоль соответствующего сервиса Хранилища

2\. Выполните команду

```bash
cat /opt/kaspersky/kuma/clickhouse/cfg/config.d/override.xml
```

3\. В выводе должны быть параметры, переопределенные в настройках севриса

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/scaled-1680-/Yl6image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/Yl6image.png)

</details>---

### Выполнение архивирования

1\. Запустить клиента clickhouse командой

```
/opt/kaspersky/kuma/clickhouse/bin/client.sh
```

2\. Выполнить запрос для просмотра партиций, например, такой

```sql
SELECT partition, name, partition_id 
FROM system.parts 
WHERE table='events_local_v2' 
AND NOT positionCaseInsensitive(partition,'audit')>0
ORDER BY partition DESC
```

3\. В результате будут выведены названия и id партиций

<details id="bkmrk-%D0%94%D0%BB%D1%8F-%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE-%D0%B4%D0%B0"><summary>Для фильтрации по дате можно воспользоваться следующим запросом</summary>

```sql
SELECT partition, name, partition_id 
FROM system.parts 
WHERE substring(partition,2,8) = '20240406'
AND table='events_local_v2'
AND NOT positionCaseInsensitive(partition,'audit')>0
```

В результате будут выведены все партиции, кроме партиций событий аудита за 6 апреля 2024 года

</details>4\. Для архивации потребуется значение из первой колонки (partition) или последней (partition\_id)

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/scaled-1680-/dUyimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/dUyimage.png)

5\. Для архивации партиции по id необходимо выполнить команду

```sql
BACKUP TABLE kuma.events_local_v2
PARTITION ID '0405a4ae764614f2283652209b390809'
TO File('/tmp/test_backup/20250221_0405a4ae764614f2283652209b390809.zip')
SETTINGS compression_method = 'lzma', compression_level=3
```

<details id="bkmrk-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2-"><summary>Описание параметров</summary>

*04fb255c7659adfd1d43ed2dd0646b10* - id партиции из предыдущего запроса

*/tmp/test\_backup/* - директория для бэкапов

*20240406\_04fb255c7659adfd1d43ed2dd0646b10.tar.gz* - имя файла бэкапа (может быть произвольным)

</details><p class="callout danger">**Важно!** В ClickHouse использующемся в KUMA до версии **3.4** включительно присутствует баг, при котором параметр **compression\_method** игнорируется, если у итогового файла выбрано расширение отличное от **.zip**  
</p>

В случае, если все прошло успешно будет получено сообщение о создании бэкапа:

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-02/scaled-1680-/p2gimage.png)

Также посмотреть состояние бэкапа можно через запрос к таблице system.backups

```sql
SELECT * FROM system.backups ORDER BY start_time \G
```

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-02/scaled-1680-/kDPimage.png)

Либо сразу с фильтрацией по соответствующему id, который был получен в результате выполнения резервного копирования

```sql
SELECT * FROM system.backups WHERE id = 'd52ba745-7ad0-4099-827a-db688aa62649' \G
```

После выполнения резервного копирования партицию можно удалить из интерфейса KUMA, либо с помощью клиента ClickHouse, либо же дождаться истечения срока хранения.

<details id="bkmrk-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BF%D0%B0%D1%80%D1%82"><summary>Пример удаления партиции из интерфейса</summary>

1\. Перейти на вкладку "Активные сервисы"

2\. Выбрать нужное хранилище, нажать по его имени правой кнопкой мыши и выбрать пункт "Смотреть разделы"

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/scaled-1680-/12cimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/12cimage.png)

3\. В разделах выбрать нужный и нажать удалить

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/scaled-1680-/dJWimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/dJWimage.png)

</details>---

### Выполнение восстановления

1\. Запустить клиента clickhouse командой

```
/opt/kaspersky/kuma/clickhouse/bin/client.sh
```

<p class="callout warning"> с версии 4.0 путь к клиенту: /opt/kaspersky/kuma/ID-storage/deps/clickhouse/bin/client.sh</p>

2\. Выполнить запрос для восстановления

```sql
RESTORE TABLE kuma.events_local_v2 
PARTITION ID '0405a4ae764614f2283652209b390809' 
FROM File('/tmp/test_backup/20250221_0405a4ae764614f2283652209b390809.zip') 
SETTINGS allow_non_empty_tables=true
```

3\. В результате будет восстановлена выбранная партиция из бэкапа и получено соответствующее сообщение:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/scaled-1680-/hSPimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/hSPimage.png)

<details id="bkmrk-%D0%95%D1%81%D0%BB%D0%B8-%D0%B1%D1%8D%D0%BA%D0%B0%D0%BF-%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D1%82-"><summary>Если бэкап содержит несколько партиций</summary>

В таком случае можно перечислить сразу несколько ID или названий партиций, например:

```sql
RESTORE TABLE kuma.events_local_v2 
PARTITIONS (20240405,'a1fbde7a-76d3-4bbc-a769-82126b41b56f',''),
(20240406,'faeede7a-76d3-4bbc-a769-82126b41e453','')
FROM File('/tmp/test_backup/20240406_04fb255c7659adfd1d43ed2dd0646b10.zip')
SETTINGS allow_non_empty_tables=true
```

Либо выполнить восстановления всех партиций из бэкапа (также полезно в случае, если не известно id или имя партиции)

```sql
RESTORE ALL 
FROM File('/tmp/test_backup/20240406_04fb255c7659adfd1d43ed2dd0646b10.zip')
SETTINGS allow_non_empty_tables=true
```

</details>По аналогии с резервным копированием в таблице system.backups можно посмотреть состояние

```sql
SELECT * FROM system.backups ORDER BY start_time \G
```

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/scaled-1680-/fxVimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2024-04/fxVimage.png)

Либо сразу с фильтрацией по соответствующему id, который был получен в результате выполнения восстановления:

```sql
SELECT * FROM system.backups WHERE id = 'd7758d2f-59c1-4650-afba-c1c288402bf5' \G
```

<p class="callout warning">При восстановлении партиция ВСЕГДА восстанавливается на диск горячего хранения. Перенос данных на холодное хранение выполняется раз в 1 час. Для форсирования операции необходимо перезапустить сервис Ядра KUMA</p>

---

### Полезные ссылки

ClickHouse Backup and Restore: [https://clickhouse.com/docs/en/operations/backup](https://clickhouse.com/docs/en/operations/backup)