Миграция и резервное копирование
Два подхода к переносу данных
Резервное копирование и восстановление (полное). Создание полной копии метаданных всей системы. Используется для 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. Процесс выглядит следующим образом.
-
На исходной системе
Пользователь с правами на воркбук выбирает опцию Экспортировать. DataLens формирует ZIP-архив со всеми объектами внутри воркбука.
-
На целевой системе
Пользователь с ролью администратора или редактора выбирает Импортировать и загружает полученный архив.
Сценарий миграции: Yandex Cloud → On-premises
Это частая задача, если компания переносит аналитику в свой контур. Поскольку прямого доступа к служебной БД облачного DataLens нет, используется метод экспорта и импорта.
План миграции:
-
Подготовка
Развернуть и настроить DataLens On-premises, включая авторизацию и сетевые доступы к источникам данных.
-
Экспорт
В облачном DataLens последовательно экспортировать необходимые воркбуки в JSON-файлы.
-
Импорт
В On-premises-окружении импортировать полученные JSON-файлы.
-
Проверка подключений
Открыть воркбуки и проверить, что подключения работают, если нет — отредактировать. Проверить сетевую доступность, сертификаты и адрес до баз данных.
-
Перепривязка
После импорта открыть датасеты и убедиться, что они используют новые подключения.
Кейс
Администратор случайно удалил важный воркбук. У него есть свежий дамп базы данных, сделанный до удаления. Он выполняет команду ./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 и обеспечивать его стабильную работу в долгосрочной перспективе.