遷移到生產環境應用程式資料庫
本頁涵蓋如何將使用內建應用程式資料庫 H2 的 Metabase 轉換為可於生產環境中使用的 PostgreSQL 實例。若要深入瞭解為何應使用 Postgres 作為您的應用程式資料庫,請參閱如何在生產環境中執行 Metabase。
如果您想要遷移到 Metabase Cloud,請參閱遷移到 Metabase Cloud。
Metabase 的應用程式資料庫
Metabase 本機安裝與生產環境安裝之間的主要差異在於應用程式資料庫。此應用程式資料庫會追蹤您的所有 Metabase 資料:您的問題、儀表板、集合等等。
Metabase 隨附內嵌的 H2 應用程式資料庫,您應避免在生產環境中使用。Metabase 隨附 H2 資料庫的原因是我們希望使用者能在本機電腦上啟動 Metabase,並開始試用提問功能。
如果您想要在生產環境中執行 Metabase,則需要使用適用於生產環境的應用程式資料庫來儲存您的應用程式資料。您可以隨時切換,停止使用預設的 H2 應用程式資料庫,但如果您計劃在生產環境中執行 Metabase,則越早遷移到生產環境應用程式資料庫越好。如果您持續使用預設的 H2 應用程式資料庫執行 Metabase,而且您沒有定期備份,則應用程式資料庫可能會損毀,而且您最終可能會遺失所有問題、儀表板、集合和其他 Metabase 資料。
遷移程序是一次性程序。您可以從任何具有 H2 應用程式資料庫檔案的電腦執行遷移腳本。
避免同時遷移和升級
此處一個重要的事項是,您在遷移程序中使用的 Metabase 版本必須相同。也就是說,您用來執行遷移命令的 Metabase 必須與上次用於建立或更新 H2 檔案的版本相同,而且必須與您將在生產環境中使用的版本相同。只有在完成遷移後,您才應考慮升級。
您也可以選擇在 Metabase Cloud 方案上執行 Metabase,此方案會為您處理所有這些事項。如果您有現有的 Metabase,以下說明如何遷移到 Metabase Cloud。
支援用於儲存 Metabase 應用程式資料的資料庫
我們建議您將 PostgreSQL 用於您的應用程式資料庫。
- PostgreSQL。最低版本:
12
。Postgres 是我們 Metabase 應用程式資料庫的首選。 - MySQL。最低版本:
8.0.17
。必要設定(預設值):utf8mb4_unicode_ci
定序、utf8mb4
字元集和innodb_large_prefix=ON
。 - MariaDB。最低版本:
10.4.0
。必要設定(預設值):utf8mb4_unicode_ci
定序、utf8mb4
字元集和innodb_large_prefix=ON
。
JAR:如何從 H2 遷移到您的生產環境應用程式資料庫
在整個遷移過程中,您都必須使用相同版本的 Metabase。
Metabase 提供自訂遷移命令,用於遷移到新的應用程式資料庫。以下是您將執行的操作
1. 確認您可以連線到目標應用程式資料庫
您必須能夠在您執行此遷移命令的任何環境中連線到目標應用程式資料庫。因此,如果您嘗試將資料移至雲端資料庫,請確定您可以連線到該資料庫。
2. 關閉您的 Metabase 實例
您不希望在您遷移時有人在您的 Metabase 中建立新內容。理想情況下,如果您在生產環境中執行 Metabase JAR,則您會以服務形式執行 Metabase。
3. 備份您的 H2 應用程式資料庫
安全第一!請參閱備份 Metabase 應用程式資料。
4. 執行 Metabase 資料遷移命令
使用適當的環境變數執行遷移命令 load-from-h2
,以遷移到您要遷移的目標資料庫。
您可以在設定應用程式資料庫中找到有關指定資料庫的詳細資訊。
以下是遷移到 Postgres 資料庫的範例命令
export MB_DB_TYPE=postgres
export MB_DB_CONNECTION_URI="jdbc:postgresql://<host>:5432/metabase?user=<username>&password=<password>"
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar load-from-h2 /path/to/metabase.db # do not include .mv.db
以下是使用 Java 參數而非環境變數遷移到 MySQL 資料庫的範例命令
java -DMB_DB_TYPE=mysql -DMB_DB_CONNECTION_URI="jdbc:mysql://<host>:3306/metabase?user=<username>&password=<password>" -jar metabase.jar load-from-h2 metabase.db
請注意,資料庫檔案本身的檔案名稱可能是 /path/to/metabase.db.mv.db
,但在執行 load-from-h2
命令時,您需要將路徑截斷為 /path/to/metabase.db
。
Metabase 預期您將對全新的(空的)資料庫執行命令;它將為您建立資料庫結構描述並遷移資料。
5. 啟動您的 Metabase
啟動您的 Metabase(使用資料庫連線資訊,但不使用 load-from-h2
和 H2 檔案遷移命令),您應該就能順利開始使用。例如,如果您使用 Postgres,則啟動 Metabase 的命令看起來會像這樣
export MB_DB_TYPE=postgres
export MB_DB_CONNECTION_URI="jdbc:postgresql://<host>:5432/metabase?user=<username>&password=<password>"
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar
不過,您應該保留舊的 H2 檔案,以確保安全、作為傳家之寶或護身符等等。
Docker:如何從 H2 遷移到您的生產環境應用程式資料庫
在整個遷移過程中,您都必須使用相同版本的 Metabase。
Metabase 提供自訂遷移命令,用於遷移到新的應用程式資料庫。以下是您將執行的操作
- 1. 確認您可以連線到目標應用程式資料庫
- 2. 備份您的 H2 應用程式資料庫
- 3. 停止現有的 Metabase 容器
- 3. 下載 JAR
- 4. 執行遷移命令
- 5. 啟動使用新應用程式資料庫的新 Docker 容器
- 7. 移除使用 H2 資料庫的舊容器
1. 確認您可以連線到目標應用程式資料庫
您必須能夠在您執行此遷移命令的任何環境中連線到目標應用程式資料庫。因此,如果您嘗試將資料移至雲端資料庫,請確定您可以連線到該資料庫。
2. 備份您的 H2 應用程式資料庫
安全第一!請參閱備份 Metabase 應用程式資料。
如果您沒有備份 H2 資料庫,並且您更換或刪除容器,您將遺失所有問題、儀表板和其他 Metabase 資料,因此請務必在遷移前備份。
3. 停止現有的 Metabase 容器
您不希望在您遷移時有人在您的 Metabase 中建立新內容。
3. 下載 JAR
在您儲存 H2 檔案的目錄中(即容器外部),下載您目前版本的 JAR。
確保您使用與您一直使用的 Metabase 版本相同的版本。如果您想要升級,請在確認遷移成功後執行升級。
4. 執行遷移命令
建立您在備份應用程式資料庫時從容器中解壓縮的 H2 檔案的另一個副本(步驟 2)。
從包含您的 H2 檔案和 Metabase JAR 的目錄中,執行遷移命令 load-from-h2
。針對您要遷移的目標資料庫,使用適當的連線字串或環境變數。該命令看起來會像這樣
export MB_DB_TYPE=postgres
export MB_DB_CONNECTION_URI="jdbc:postgresql://<host>:5432/metabase?user=<username>&password=<password>"
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar load-from-h2 /path/to/metabase.db # do not include .mv.db
Metabase 將啟動,執行遷移(表示它會從 H2 檔案中取得資料並將其放入您的新應用程式資料庫中,在此範例中為 Postgres 資料庫),然後結束。
請參閱設定應用程式資料庫。
5. 啟動使用新應用程式資料庫的新 Docker 容器
在您的新應用程式資料庫填入您的 Metabase 資料後,您可以啟動新的容器,並告知容器中的 Metabase 連線到應用程式資料庫。該命令看起來會像這樣
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 文件以瞭解如何移除容器。
手動執行 Metabase 應用程式資料庫遷移
當 Metabase 啟動時,它通常會嘗試判斷應用程式資料庫是否需要任何變更,如果是,則會自動執行這些變更。如果由於某些原因,您想要查看這些變更是什麼,並在您的資料庫上手動執行它們,那麼我們允許您這樣做。
只需在啟動 Metabase 之前設定以下環境變數
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 Metabase. 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 :: Metabase Shutting Down ...
接著,您可以取得提供的 SQL 腳本,並將其手動套用至您的資料庫。完成後,只需重新啟動 Metabase,一切都應正常運作。
遷移問題疑難排解
請查看本疑難排解指南。
閱讀其他Metabase 版本的文件。