---
metadata:
  - name: generator
    content: Diplodoc Platform v5.59.0
alternate:
  - https://ydb-platform--ydb.viewer.diplodoc.com/en/recipes/system-tablet-backup/recovery.md
  - https://ydb-platform--ydb.viewer.diplodoc.com/ru/recipes/system-tablet-backup/recovery.md
  - href: https://ydb-platform--ydb.viewer.diplodoc.com/ru/recipes/system-tablet-backup/recovery.md
    type: text/markdown
    title: Markdown version
  - href: https://ydb-platform--ydb.viewer.diplodoc.com/ru/llms.txt
    rel: describedby
sourcePath: ru/core/recipes/system-tablet-backup/recovery.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb-platform--ydb.viewer.diplodoc.com/ru/llms.txt

# Восстановление системных таблеток {#recovery-guide}

{% note info %}

Концептуальную информацию о механизме см. в разделе [Резервное копирование системных таблеток](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/backup.md#system-tablet-backup).

{% endnote %}

{% note warning %}

Восстановление системных таблеток — критическая операция, в результате которой могут быть потеряны данные. Выполняйте её только при наличии чёткого понимания проблемы и после консультации с командой эксплуатации. Перед началом убедитесь, что вы ознакомились со всеми шагами.

{% endnote %}

## Шаг 1. Переведите таблетку в Recovery-режим {#enable-recovery-mode}

Таблетку, которую требуется восстановить, необходимо перевести в Recovery-режим. В этом режиме таблетка запускается и доступна через [Embedded UI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/reference/embedded-ui/index.md), но **не работает штатно** и **не вычитывает данные из распределённого хранилища**, что позволяет выполнять операции восстановления. Остальные таблетки продолжат работать в штатном режиме, что позволит кластеру продолжать функционировать, но некоторые control-plane операции могут быть недоступны.

{% note warning %}

Если восстановление выполняется после полной потери [статической группы](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#static-group), все системные таблетки должны быть переведены в Recovery-режим одновременно с пересозданием статической группы на новых хостах. Если пересоздать статическую группу, не переведя таблетки в Recovery-режим, они автоматически запустятся поверх пустой статической группы, что приведёт к неправильной работе кластера.

{% endnote %}

1. Определите идентификатор системной таблетки, которую требуется восстановить. Идентификатор таблетки можно найти в разделе Tablets в [Embedded UI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/reference/embedded-ui/index.md).
2. Определите список узлов, на которых может работать восстанавливаемая системная таблетка. Этот список находится в секции `bootstrap_config` соответствующей таблетки в [конфигурации кластера](https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/configuration-management/index.md). Если секция `bootstrap_config` отсутствует в конфигурации, используйте список всех [статических узлов](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#static-node) кластера, указанных в секции `hosts` конфигурации кластера.
3. Измените конфигурацию, добавив `boot_mode: RECOVERY` в секцию `bootstrap_config` восстанавливаемой таблетки.
    - При использовании конфигурации V1, необходимо изменить [статическую конфигурацию](https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/configuration-management/configuration-v1/static-config.md) на всех узлах, на которых может работать восстанавливаемая таблетка.
    - При использовании конфигурации V2, воспользуйтесь [инструкцией](https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/configuration-management/configuration-v2/update-config.md).
    - Пример для таблетки `Hive` с идентификатором `72057594037968897`:

    ```yaml
        bootstrap_config:
            tablet:
            - type: FLAT_HIVE
              node:
              - 1
              - 2
              - 3
              info:
                  tablet_id: '72057594037968897'
                  channels:
                  - channel: 0
                  history:
                  - from_generation: 0
                      group_id: 0
                  channel_erasure_name: mirror-3-dc
                  - channel: 1
                  history:
                  - from_generation: 0
                      group_id: 0
                  channel_erasure_name: mirror-3-dc
                  - channel: 2
                  history:
                  - from_generation: 0
                      group_id: 0
                  channel_erasure_name: mirror-3-dc
              boot_mode: RECOVERY
    ```

4. Перезапустите все узлы, на которых может работать восстанавливаемая таблетка. Если какой-либо узел недоступен и не может быть перезапущен, изолируйте его от кластера по сети — например, с помощью firewall.

    {% note warning %}

    Убедитесь, что все узлы, на которых может работать восстанавливаемая таблетка, перезапущены с обновлённой конфигурацией или изолированы от кластера по сети до начала восстановления. В процессе восстановления старые данные стираются и заменяются данными из резервной копии. Если в этот момент таблетка запустится в обычном режиме на узле со старой конфигурацией, она может начать работу с частично восстановленными данными.

    {% endnote %}

5. Убедитесь, что:
    - С таблеткой нет проблем в [HealthCheck](https://ydb-platform--ydb.viewer.diplodoc.com/ru/reference/ydb-sdk/health-check-api.md).
    - Таблетка не перезапускается.
    - В App таблетки в [Embedded UI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/reference/embedded-ui/index.md) доступна форма восстановления.

## Шаг 2. Найдите файлы резервной копии {#find-backup-files}

1. Определите, на каких хостах искать. Прежде всего проверьте хосты, на которых таблетка работала до сбоя. Определить эти хосты можно с помощью логов или системы мониторинга.

    Если определить конкретные хосты не удалось, проверьте все хосты, на которых таблетка могла работать. Этот список находится в секции `bootstrap_config` соответствующей таблетки в [конфигурации кластера](https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/configuration-management/index.md). Если секция `bootstrap_config` отсутствует в конфигурации, используйте список всех [статических узлов](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#static-node) кластера, указанных в секции `hosts` конфигурации кластера.

2. Найдите директорию с резервными копиями. На каждом хосте-кандидате проверьте наличие резервных копий. Путь к резервным копиям определяется параметром `path` в конфигурации `system_tablet_backup_config`:

    ```bash
    ls /path/to/backup/directory/<tablet_type>/<tablet_id>/
    ```

    Пример для таблетки `Hive` с идентификатором `72057594037968897`:

    ```bash
    ls /tablet/hive/72057594037968897/
    ```

    ```text
    backup_20251007T181003_g213_s1001
    backup_20251007T191002_g214_s1040
    backup_20251007T193502_g214_s1222
    ```

3. Выберите наиболее актуальную резервную копию. Имя каждой резервной копии содержит ключевую информацию: `backup_<timestamp>_g<generation>_s<step>`, где:

    - `timestamp` — время создания резервной копии;
    - `generation` — [поколение таблетки](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#tablet-generation), увеличивается при каждом перезапуске таблетки;
    - `step` — шаг таблетки в рамках поколения, увеличивается при каждом изменении состояния таблетки.

    Выберите резервную копию с **максимальным поколением**, а при равном поколении — с **максимальным шагом**. Если резервные копии найдены на нескольких хостах, сравните их между собой и выберите наиболее актуальную.

4. Убедитесь, что резервная копия полностью записана. Выбранная резервная копия должна содержать директорию `snapshot`, а **не** `snapshot.tmp`. Наличие `snapshot.tmp` означает, что запись снапшота не была завершена и копия непригодна для восстановления. В этом случае выберите предыдущую по актуальности копию.

    ```bash
    ls /tablet/hive/72057594037968897/backup_20251007T193502_g214_s1222/snapshot/
    ```

    ```text
    manifest.json
    schema.json
    Tablet.json
    TabletFollowerGroup.json
    ...
    ```

## Шаг 3. Перенесите файлы резервной копии {#transfer-backup-files}

1. Определите, на каком хосте запущена таблетка в Recovery-режиме. Для этого откройте [Embedded UI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/reference/embedded-ui/index.md) и найдите узел, на котором работает таблетка.
2. Если файлы резервной копии находятся на другом хосте, скопируйте их на хост с таблеткой в Recovery-режиме с помощью `scp`, `rsync` или любого другого доступного инструмента:

    ```bash
    scp -r /tablet/hive/72057594037968897/backup_20251007T193502_g214_s1222 \
        user@target-host:~/backup_20251007T193502_g214_s1222
    ```

3. Убедитесь, что файлы доступны для чтения процессу YDB на целевом хосте.

## Шаг 4. Выполните восстановление {#perform-recovery}

1. Откройте App восстанавливаемой таблетки в [Embedded UI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/reference/embedded-ui/index.md).

2. В форме восстановления укажите полный путь до директории с файлами резервной копии, например:

    ```text
    /tablet/hive/72057594037968897/backup_20251007T193502_g214_s1222
    ```

3. При необходимости установите флаги:

    - **Dry Run** — выполняет пробное восстановление без внесения изменений в хранилище. Позволяет убедиться в корректности резервной копии.
    - **Skip Checksum Validation** — пропускает проверку контрольных сумм файлов резервной копии.

    {% note warning %}

    Всегда выполняйте Dry Run перед первым восстановлением, чтобы убедиться в корректности резервной копии.

    {% endnote %}

    {% note warning %}

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

    {% endnote %}

4. Нажмите кнопку **Start Restore**. Перед началом восстановления система запросит подтверждение, так как операция перезаписывает существующие данные таблетки. Подтвердите действие для запуска. После начала восстановления форма становится недоступной — повторный запуск невозможен до перезапуска таблетки.

    {% note info %}

    Восстановление также можно запустить с помощью `curl`, отправив POST-запрос на страницу App таблетки с параметром `restoreBackup`:

    ```bash
    curl -X POST "http://<host>:<mon_port>/tablets/app?TabletID=72057594037968897&restoreBackup=/tablet/hive/72057594037968897/backup_20251007T193502_g214_s1222"
    ```

    Где `<host>` — адрес узла кластера, `<mon_port>` — порт мониторинга этого узла.

    {% endnote %}

5. Отслеживайте прогресс восстановления. Страница **не обновляется автоматически** — для получения актуального статуса обновляйте страницу вручную. Продолжительность восстановления зависит от объёма резервной копии.

    {% note info %}

    Восстановление выполняется на стороне сервера и не зависит от браузера. Вы можете закрыть страницу или браузер — это **не прервёт** процесс восстановления. При повторном открытии страницы отобразится актуальный статус.

    {% endnote %}

    Под формой отображается текущий статус операции. Возможные статусы:

    - `Restoring from '<путь>'` — восстановление выполняется, данные из резервной копии считываются и записываются в хранилище. Дополнительно отображается **прогресс-бар** с процентом выполнения операции.
    - `Restore from '<путь>' completed successfully` — восстановление завершено успешно. Можно переходить к следующему шагу.
    - `Restore from '<путь>' completed, but changelog is not fully restored` — основные данные таблетки восстановлены, но хвост журнала изменений в резервной копии повреждён, и часть последних изменений потеряна. Изучите, какие данные были потеряны, и при необходимости восстановите их вручную, либо переходите к следующему шагу.
    - `Restore from '<путь>' failed: <описание ошибки>` — восстановление завершилось с ошибкой. Изучите описание ошибки и при необходимости повторите попытку.

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

6. Дождитесь успешного завершения восстановления. Если форма восстановления снова стала доступна (кнопка **Start Restore** активна, статус сброшен), это означает, что таблетка была перезапущена и восстановление прервано. В этом случае начните восстановление заново с пункта 2.

## Шаг 5. Верните таблетку к нормальному режиму работы {#return-to-normal}

После успешного восстановления:

1. Определите список узлов, на которых может работать восстанавливаемая системная таблетка. Этот список находится в секции `bootstrap_config` соответствующей таблетки в [конфигурации кластера](https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/configuration-management/index.md). Если секция `bootstrap_config` отсутствует в конфигурации, используйте список всех [статических узлов](https://ydb-platform--ydb.viewer.diplodoc.com/ru/concepts/glossary.md#static-node) кластера, указанных в секции `hosts` конфигурации кластера.
2. Измените конфигурацию, удалив `boot_mode: RECOVERY` из секции `bootstrap_config` восстанавливаемой таблетки.
    - При использовании конфигурации V1, необходимо изменить [статическую конфигурацию](https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/configuration-management/configuration-v1/static-config.md) на всех узлах, на которых может работать восстанавливаемая таблетка.
    - При использовании конфигурации V2, воспользуйтесь [инструкцией](https://ydb-platform--ydb.viewer.diplodoc.com/ru/devops/configuration-management/configuration-v2/update-config.md).
3. Перезапустите все узлы, на которых может работать восстанавливаемая таблетка. Если какие-либо узлы были изолированы от кластера по сети на предыдущих шагах, снимите сетевую изоляцию.
4. Убедитесь, что:
    - С таблеткой нет проблем в [HealthCheck](https://ydb-platform--ydb.viewer.diplodoc.com/ru/reference/ydb-sdk/health-check-api.md).
    - Таблетка не перезапускается.
    - В App таблетки в [Embedded UI](https://ydb-platform--ydb.viewer.diplodoc.com/ru/reference/embedded-ui/index.md) отсутствует форма восстановления.
