Процедура бекапа и восстановления в Clickhouse связана с прямыми операциями с файлами и не требует никаких дополнительных инструментов. Физически эта база данных оперирует не таблицами, а партициями – частями таблиц.
Бекапы в Clickhouse делается в два этапа:
Первым шагом необходимо выполнить т.н. “заморозку” данных на диске. Сначала нужно получить список всех таблиц и их партиций той базы данных, которую мы собираемся бекапить:
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 … для каждой партиции.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…