Миграция на базу данных уровня промышленной эксплуатации

Метаданные Glarus BI

Основное различие между локальной установкой и установкой для промышленной эксплуатации заключается в выборе базе данных приложения. С помощью метаданных отслеживаются все элементы: ваши вопросы, дашборды, коллекции и так далее.

Glarus BI поставляется со встроенной базой данных приложения H2, которую не следует использовать для промышленной эксплуатации. Причина, по которой Glarus BI поставляется с базой данных H2, заключается в том, что мы хотим, чтобы люди запускали Glarus BI на своих локальных компьютерах и имели возможность быстро начать работу.

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

Как правило, процесс миграции происходит однократно. Вы можете выполнить сценарий миграции с любого компьютера, на котором есть файл базы данных приложения H2. Например, если вы пытаетесь выполнить миграцию на AWS Elastic Beanstalk для запуска Glarus BI с базой данных RDS, вы можете запустить миграцию со своего компьютера, а не пытаться копировать файл H2 на виртуальную машину AWS Elastic Beanstalk.

Избегайте запуска процессов миграции и обновления версии одномоментно

При миграции требуется, чтобы исходная и целевая версии Glarus BI были одинаковыми. Это означает, что Glarus BI, которую вы используете для запуска команды миграции, должна быть той же самой, которая в последний раз использовалась для создания или обновления файла H2, и это должна быть та же версия, которую вы будете использовать в рабочей среде. О переходе на новую версию Glarus BI и обновлении можно подумать только после завершения миграции.

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

Поддерживаемые базы данных для хранения метаданных

  • PostgreSQL. Минимальная версия: 9.4.

  • MySQL. Минимальная версия: 5.7.7. Требуемые настройки (по умолчанию): сортировка utf8mb4_unicode_ci, кодировка utf8mb4, и innodb_large_prefix=ON.

  • MariaDB. Минимальная версия: 10.2.2. Требуемые настройки (по умолчанию): сортировка utf8mb4_unicode_ci, кодировка utf8mb4, и innodb_large_prefix=ON.

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

JAR: Как мигрировать с H2 на базу данных уровня промышленной эксплуатации

Вы должны использовать одну и ту же версию Glarus BI на протяжении всего процесса миграции.

Glarus BI предоставляет набор команд для миграции на новую базу данных. Необходимо сделать следующее:

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

У вас должен быть настроен доступ к целевой базе данных Postgres или MySQL/MariaDB в любой среде, в которой вы запускаете эту команду миграции. Поэтому, если вы пытаетесь мигрировать данные в облачную базу данных, убедитесь, что вы можете к ней подключиться.

2. Выключите Glarus BI

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

3. Сделайте резервную копию вашей базы данных H2

Создайте резервную копию Glarus BI.

4. Запустите процесс миграции

Запустите команду миграции load-from-h2, используя соответствующие переменные среды для целевой базы данных, в которую вы хотите выполнить миграцию.

Подробную информацию о настройках баз данных MySQL и Postgres можно найти в разделе настройка базы данных приложения.

Ниже приведён пример команды для миграции на базу данных Postgres:

export MB_DB_TYPE=postgres
export MB_DB_CONNECTION_URI="jdbc:postgresql://<host>:5432/metabase?user=<username>&password=<password>"
java -jar glarusBI.jar load-from-h2 /path/to/metabase.db # do not include .mv.db

Вот пример команды для миграции на базу данных MySQL с использованием параметра Java вместо переменных среды:

java -DMB_DB_TYPE=mysql -DMB_DB_CONNECTION_URI="jdbc:mysql://<host>:3306/metabase?user=<username>&password=<password>" -jar glarusBI.jar load-from-h2 metabase.db

Обратите внимание, что имя файла самой базы данных может быть /path/to/metabase.db.mv.db, но при запуске команды load-from-h2 вам нужно привести его к виду /path/to/metabase.db.

Glarus BI ожидает, что вы запустите процесс миграции в совершенно новую (пустую) базу данных; при этом он создаст схему бд и сам перенесёт все необходимые данные.

5. Запустите Glarus BI

Запустите Glarus BI (указав коннект к новой БД в переменных окружения). Например, если вы используете Postgres, ваша команда для запуска Glarus BI будет выглядеть примерно так:

export MB_DB_TYPE=postgres
export MB_DB_CONNECTION_URI="jdbc:postgresql://<host>:5432/metabase?user=<username>&password=<password>"
java -jar glarusBI.jar

Docker: как перейти с H2 на базу данных уровня промышленной эксплуатации

Вы должны использовать одну и ту же версию Glarus BI на протяжении всего процесса миграции.

Glarus BI предоставляет набор команд для миграции на новую базу данных. Необходимо сделать следующее:

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

У вас должен быть настроен доступ к целевой базе данных PostgreSQL или MySQL/MariaDB в любой среде, в которой вы запускаете эту команду миграции. Поэтому если вы пытаетесь мигрировать данные в облачную базу данных, убедитесь, что вы можете к ней подключиться.

2. Сделайте резервную копию вашей базы данных H2

Создайте резервную копию Glarus BI.

3. Остановите запущенный контейнер Glarus BI

Пока происходит миграция данных, необходимо ограничить пользователям возможность создавать новые метаданные.

4. Загрузите JAR

В каталоге, где вы сохранили файл H2 (вне контейнера), загрузите JAR соответствующий вашей текущей версии Glarus BI.

Убедитесь, что вы используете ту же версию Glarus BI, что и раньше. Если вы хотите выполнить обновление на новую версию, выполните его только после того, как убедитесь, что миграция прошла успешно.

5. Запустите процесс миграции

Создайте ещё одну копию файла H2 (можно использовать данные из шага 2).

В том каталоге, где находится файл базы данных H2 и JAR файл Glarus BI запустите команду переноса load-from-h2. Для подключения к целевой базе данных используйте параметры подключения, или же переменные среды. Команда будет выглядеть примерно так:

export MB_DB_TYPE=postgres
export MB_DB_CONNECTION_URI="jdbc:postgresql://<host>:5432/metabase?user=<username>&password=<password>"
java -jar glarusBI.jar load-from-h2 /path/to/metabase.db # do not include .mv.db

Glarus BI запустится, выполнит миграцию (это означает, что она возьмет данные из файла H2 и поместит их в новую базу данных приложения, в данном случае базу данных Postgres), а затем завершит работу.

Подробную информацию об настройках для баз данных MySQL и Postgres можно найти в разделе Настройка базы данных приложения.

6. Запустите новый Docker-контейнер с параметрами новой базы данных

Теперь вы можете стартовать новый контейнер с Glarus BI и выполнить подключение к новой базе данных, в которую перенесены все ваши данные.

Команда будет выглядеть примерно следующим образом:

docker run -d -p 3000:3000 \
  -e "MB_DB_TYPE=postgres" \
  -e "MB_DB_DBNAME=<your-postgres-db-name>" \
  -e "MB_DB_PORT=5432" \
  -e "MB_DB_USER=<db-username>" \
  -e "MB_DB_PASS=<db-password>" \
  -e "MB_DB_HOST=<your-database-host>" \
  --name metabase metabase/metabase

7. Удалите старый контейнер, который использовал базу данных H2

Если вы сохранили резервную копию файла H2, можете удалить старый контейнер. См. документацию по Docker для удаления контейнеров.

Запуск миграции базы данных приложения Glarus BI вручную

Когда Glarus BI запускается, она обычно пытается определить, необходимо ли внести какие-либо изменения в базе данных приложения, и если да, то автоматически выполняет эти изменения. Если по какой-то причине вы хотите увидеть, что это за изменения, и выполнить их в ручном режиме, установите следующую переменную среды перед запуском Glarus BI:

    export MB_DB_AUTOMIGRATE=false

В этом случае при запуске приложения, если необходимо выполнить изменения в базе данных, вы получите сообщения, указывающие, что приложение не может быть запущено, пока не будет проведены обновления:

    2015-12-01 12:45:45,805 [INFO ] metabase.db :: Database Upgrade Required

    NOTICE: Your database requires updates to work with this version of Glarus BI.  Please execute the following sql commands on your database before proceeding.

    -- *********************************************************************
    -- Update Database Script
    -- *********************************************************************
    -- Change Log: migrations/liquibase.yaml
    -- Ran at: 12/1/15 12:45 PM
    -- Against: @jdbc:h2:file:/Users/agilliland/workspace/metabase/metabase/metabase.db
    -- Liquibase version: 3.4.1
    -- *********************************************************************

    -- Create Database Lock Table
    CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK (ID INT NOT NULL, LOCKED BOOLEAN NOT NULL, LOCKGRANTED TIMESTAMP, LOCKEDBY VARCHAR(255), CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID));

    ...

    Once your database is updated try running the application again.

    2015-12-01 12:46:39,489 [INFO ] metabase.core :: Glarus BI Shutting Down ...
```text

Вы можете вручную выполнить SQL-скрипты и после его выполнения, просто перезапустите Glarus BI.

## Устранение проблем с миграцией

См. [руководство по устранению ошибок](../troubleshooting-guide/loading-from-h2.md).