Миграция и резервное копирование

Два подхода к переносу данных

Резервное копирование и восстановление (полное). Создание полной копии метаданных всей системы. Используется для Disaster Recovery (восстановления после сбоя) или для клонирования среды (например, dev → test).

Экспорт и импорт (частичный). Это перенос отдельных объектов (воркбуков с их содержимым). Используется для переноса готовых отчетов между средами (например, test → prod) или для миграции из облака.

Резервное копирование и восстановление БД PostgreSQL

Вся конфигурация DataLens (пользователи, дашборды, права) хранится в служебной базе PostgreSQL. Бэкап этой БД — это и есть бэкап всей системы. Скрипт ./init.sh предоставляет для этого удобные команды:

  • Создать бэкап:

    ./init.sh --dump-postgres 
    

    Эта команда создаст SQL-дамп базы данных и выведет его в stdout, который перенаправляется в файл. Регулярное выполнение этой команды — основа стратегии бэкапов.

  • Восстановить из бэкапа:

    ./init.sh --restore-postgres datalens_enterprise_<...>.dump
    

    Эта команда развернет данные из указанного SQL-файла в базу данных.

    Восстановление БД не возвращает удаленные воркбуки, поскольку флаги is_deleted не перезаписываются.

    Бэкап нужен, например, при переносе DataLens на другой сервер или возникновении инцидентов с БД. Для возвращения удаленных воркбуков используйте следующий способ.

  • Восстановить из бэкапа с полной предварительной очисткой старых объектов в базе данных:

    ./init.sh --restore-postgres-with-clear datalens_enterprise_<...>.dump
    

Важность CONTROL_API_CRYPTO_KEY

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

При миграции через бэкап и восстановление важно перенести не только дамп БД, но и значение CONTROL_API_CRYPTO_KEY из секрета Kubernetes старой системы в новую. Для этого используйте команду:

./init.sh --kubectl get secret datalens-enterprise-secrets -o jsonpath='{.data.CONTROL_API_CRYPTO_KEY}' | base64 -d; echo

Что делать, если случайно удалили воркбук

Поскольку бэкапирование через --restore-postgres не восстанавливает удаленные воркбуки, вам может понадобиться восстановить воркбук, который удалили случайно.

Для этого есть вспомогательные команды:

# Выполните эту команду, чтобы вернуть список удаленных воркбуков
./init.sh --pg sh -c 'psql -U "${POSTGRES_USER}" -d "${POSTGRES_DB_US}" -c "SELECT encode_id(workbook_id) AS workbook_id, title, deleted_at FROM workbooks WHERE deleted_at IS NOT NULL"'
# Узнав нужный ID воркбука, подставьте его в команду ниже для восстановления (вместо <WORKBOOK_ID>)
./init.sh --kubectl exec -it deploy/datalens-enterprise-us -- node -e "fetch('http://localhost:8080/private/v2/workbooks/<WORKBOOK_ID>/restore',{method:'POST',headers:{'content-type':'application/json','x-us-master-token':process.env.MASTER_TOKEN}}).then(r=>r.json()).then(console.log)"

Экспорт и импорт воркбуков

Этот механизм предназначен для переноса конкретного контента. Он требует, чтобы на обеих инсталляциях была включена функция export. Процесс выглядит следующим образом.

  1. На исходной системе

    Пользователь с правами на воркбук выбирает опцию Экспортировать. DataLens формирует ZIP-архив со всеми объектами внутри воркбука.

  2. На целевой системе

    Пользователь с ролью администратора или редактора выбирает Импортировать и загружает полученный архив.

Сценарий миграции: Yandex Cloud → On-premises

Это частая задача, если компания переносит аналитику в свой контур. Поскольку прямого доступа к служебной БД облачного DataLens нет, используется метод экспорта и импорта.

План миграции:

  1. Подготовка

    Развернуть и настроить DataLens On-premises, включая авторизацию и сетевые доступы к источникам данных.

  2. Экспорт

    В облачном DataLens последовательно экспортировать необходимые воркбуки в JSON-файлы.

  3. Импорт

    В On-premises-окружении импортировать полученные JSON-файлы.

  4. Проверка подключений

    Открыть воркбуки и проверить, что подключения работают, если нет — отредактировать. Проверить сетевую доступность, сертификаты и адрес до баз данных.

  5. Перепривязка

    После импорта открыть датасеты и убедиться, что они используют новые подключения.

Кейс

Администратор случайно удалил важный воркбук. У него есть свежий дамп базы данных, сделанный до удаления. Он выполняет команду ./init.sh --restore-postgres datalens_enterprise_<...>.dump, но воркбук по-прежнему не появляется. Почему?

  • Дамп поврежден или создан после удаления воркбука.
  • Для восстановления нужно предварительно перенести CONTROL_API_CRYPTO_KEY из дампа, иначе объекты не расшифровываются и не отображаются.
  • Команда --restore-postgres не перезаписывает флаги is_deleted.
  • Нужно дополнительно выполнить ./init.sh --restore-postgres-with-clear для каждого удаленного воркбука отдельно.
Узнать ответ
  • Дамп поврежден или создан после удаления воркбука.

    Неверно. По условию задачи дамп свежий и создан до удаления. Проблема не в дампе.

  • Для восстановления нужно предварительно перенести CONTROL_API_CRYPTO_KEY из дампа, иначе объекты не расшифровываются и не отображаются.

    Неверно. Ключи CONTROL_API_CRYPTO_KEY влияют на расшифровку паролей в подключениях, но не на видимость или наличие воркбуков.

  • Команда --restore-postgres не перезаписывает флаги is_deleted.

    Верно. Восстановление через --restore-postgres не возвращает удалённые воркбуки, так как флаги is_deleted не перезаписываются. Для этого случая нужно использовать --restore-postgres-with-clear или команду точечного восстановления конкретного воркбука по его ID.

  • Нужно дополнительно выполнить ./init.sh --restore-postgres-with-clear для каждого удаленного воркбука отдельно.

    Неверно. Команда --restore-postgres-with-clear применяется ко всей базе данных целиком, а не к отдельным воркбукам. Для точечного восстановления конкретного воркбука существует отдельная процедура.

Итоги

Вы освоили критически важные навыки: резервное копирование, восстановление и миграцию. Теперь вы умеете развертывать, настраивать DataLens On-premises и обеспечивать его стабильную работу в долгосрочной перспективе.