Восстановление репликации ClickHouse: Пошаговое руководство для ReplicatedMergeTree и ReplicatedCollapsingMergeTree
Пошаговая инструкция по восстановлению репликации ClickHouse для таблиц ReplicatedCollapsingMergeTree и ReplicatedMergeTree, а также добавлению и синхронизации данных с другого сервера или из бэкапа базы
1. Создание таблиц и настройка репликации
Так как таблицы с движком ReplicatedCollapsingMergeTree
не поддерживают восстановление с помощью RESTORE
, необходимо вручную создать их на каждом сервере с одинаковым DDL:
CREATE TABLE database.mytable (
id UInt64,
event_time DateTime,
status String,
sign Int8
) ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/{shard}/database/mytable', '{replica}', sign)
PARTITION BY toYYYYMM(event_time)
ORDER BY (event_time, id);
При этом {shard}
и {replica}
должны быть заменены на соответствующие параметры кластера.
2. Перемещение данных в каталог detached
Скопировать и поместить parts
(части данных) в каталог detached
. Данные можно взять из бэкапа или с другого кластера:
rsync -avz /backup/clickhouse/mytable/ /var/lib/clickhouse/data/database/mytable/detached/
Проверить, что файлы успешно скопированы:
ls -l /var/lib/clickhouse/data/database/mytable/detached/
3. Выполнение команд для подключения частей данных
Чтобы сформировать SQL-запросы для подключения частей:
for part in /var/lib/clickhouse/data/database/mytable/detached/*; do
part_name=$(basename "$part")
echo "ALTER TABLE database.mytable ATTACH PART '$part_name';"
done
Эта команда выведет SQL-запросы, но не выполнит их.
Если всё выглядит корректно, можно запустить выполнение команд:
for part in /var/lib/clickhouse/data/database/mytable/detached/*; do
part_name=$(basename "$part")
clickhouse-client --host=localhost --query "ALTER TABLE database.mytable ATTACH PART '$part_name';"
done
4. Отладка и проверка
Если в каталоге detached
нет файлов, команда ничего не выведет. Для отладки можно добавить вывод обрабатываемых частей:
for part in /var/lib/clickhouse/data/database/mytable/detached/*; do
[ -d "$part" ] || continue # Пропустить, если это не папка
part_name=$(basename "$part")
echo "Processing: $part_name"
clickhouse-client --host=localhost --query "ALTER TABLE database.mytable ATTACH PART '$part_name';"
done
Так можно отследить, какие части действительно обрабатываются.
5. Проверка успешности восстановления
После выполнения всех команд проверить, что данные восстановились корректно:
SELECT count(*) FROM database.mytable;
При необходимости выполнить OPTIMIZE TABLE
:
OPTIMIZE TABLE database.mytable FINAL;
Комментарии
Отправить комментарий