Рубріки: HighloadТеория

Бекап и восстановление в Clickhouse

Игорь Грегорченко

Процедура бекапа и восстановления в Clickhouse связана с прямыми операциями с файлами и не требует никаких дополнительных инструментов. Физически эта база данных оперирует не таблицами, а партициями – частями таблиц.

Бекап данных

Бекапы в Clickhouse делается в два этапа:

  1. Заморозка данных (партиций).
  2. Копирование данных на внешний сервер.

Первым шагом необходимо выполнить т.н. “заморозку” данных на диске. Сначала нужно получить список всех таблиц и их партиций той базы данных, которую мы собираемся бекапить:

SELECT partition, table, database FROM system.parts WHERE active AND database = ‘**default**’;

## список партиций и таблиц базы дынных default

Примерный ответ от сервера:

┌─partition─┬─table─────┬─database─┐
│ 197510    │ carts     │ default  │
...

После этого каждую партицию каждой таблицы необходимо заморозить:

ALTER TABLE  default.**carts** FREEZE PARTITION ‘**197510**’;

## замораживаем партицию 197510 таблицы carts

После заморозки партиций Clickhouse создает в директории /var/lib/clickhouse/shadow/N/ бекапы с такой же структурой как и в основной папке данных. N – инкрементальный номер бекапа. Данные создаются жесткими ссылками – почти моментально даже для больших таблиц.

Данные внутри папки с бекапом будут выглядеть так:

root@ruhighload:/var/lib/clickhouse/shadow/1/data/default# ls -la
total 12
drwxr-x--- 3 clickhouse clickhouse 4096 May 28 14:06 .
drwxr-x--- 3 clickhouse clickhouse 4096 May 28 14:06 ..
drwxr-x--- 3 clickhouse clickhouse 4096 May 28 14:06 **carts**

## структура данных будет такой же, как и в папке с данными

Далее достаточно скопировать данные из папки /var/lib/clickhouse/shadow/ на резервный сервер (после этого можно удалить их из этой папки) либо оставить в этой папке.

Кроме данных таблиц, имеет смысл также копировать их метаданные. В папке /var/lib/clickhouse/metadata/[БД] будут лежать SQL файлы с определением структуры таблиц. В нашем случае необходимо скопировать:
cp /var/lib/clickhouse/metadata/**default/carts.sql** /mnt/s3/backup.sql
## копируем файл со структурой таблицы

Восстановление данных

Процедура восстановления зеркальная. Восстановим данные в базе данных restored:
CREATE DATABASE restored

Первым делом необходимо создать таблицы, выполнив запросы из SQL файлов метаданных (не забудем изменить “ATTACH” на “CREATE” в файлах с метаданными):

sed 's/ATTACH/CREATE/g' /mnt/s3/backup.sql | clickhouse-client --database restored
## создаем таблицы в базе данных restored

После этого скопируем данные в папку /var/lib/clickhouse/data/[БД]/[таблица]/detached/:
cp -r /mnt/s3/cart /var/lib/clickhouse/data/**restored/carts**/detached/
## внутри папки cart будут папки партиций в виде 19751006_19751020_1_4_1

Убедимся, что у Clickhouse будут права на чтение и запись файлов:
chown clickhouse:clickhouse /var/lib/clickhouse/data/**restored/carts**/ -R

После этого необходимо для всех партиций таблиц выполнить ATTACH:
ALTER TABLE restored.carts ATTACH PARTITION '197510'
## Выполняем для всех партиций

Готово, с таблицей можно работать:

SELECT *
FROM restored.carts 

┌─cart_id─┬─product_id─┬─count─┬─added_date─┬──────────added_time─┐
│       1 │          1 │     1 │ 1975-10-06 │ 2018-03-24 11:11:36 │
│       2 │          1 │     1 │ 1975-10-16 │ 2018-03-24 11:11:46 │
│       1 │          2 │     1 │ 1975-10-11 │ 2018-03-24 11:11:41 │
│       3 │          3 │     1 │ 1975-10-20 │ 2018-03-24 11:11:50 │
└─────────┴────────────┴───────┴────────────┴─────────────────────┘

4 rows in set. Elapsed: 0.003 sec. 

<h2>TL;DR

Бекапы в Clickhouse делаются в папку /var/lib/clickhouse/shadow/ автоматически после замораживания всех партиций таблиц (ALTER TABLE … FREEZE PARTITION …). Файлы из этой папки можно копировать на резервный сервер. Восстановление делается копированием этих файлов обратно и выполнением ALTER TABLE … ATTACH PARTITION … для каждой партиции.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023