設定 Metabase 應用程式資料庫

應用程式資料庫是 Metabase 儲存使用者帳戶、問題、儀表板以及執行 Metabase 應用程式所需的任何其他資料的地方。此應用程式資料庫與您儲存資料的資料庫(也稱為資料倉儲)不同。如需連線至您的資料倉儲,請參閱連線至支援的資料庫

針對生產環境,我們建議使用 PostgreSQL 作為您的 Metabase 應用程式資料庫。

  • PostgreSQL(建議用於生產環境)
  • MySQL 或 MariaDB(也適用於生產環境)
  • H2(本機示範的預設值 - 生產環境中請避免使用)

Metabase 會在應用程式啟動時讀取連線組態資訊。應用程式執行時,您無法變更應用程式資料庫。

PostgreSQL

我們建議您使用 PostgreSQL 作為您的 Metabase 應用程式資料庫。Metabase 支援從 PostgreSQL 最舊的支援版本到最新的穩定版本。請參閱 PostgreSQL 版本

您可以使用環境變數將 Postgres 資料庫設定為 Metabase 的應用程式資料庫。例如,以下命令會告知 Metabase 使用 Postgres 資料庫作為其應用程式資料庫

export MB_DB_TYPE=postgres
export MB_DB_DBNAME=metabase
export MB_DB_PORT=5432
export MB_DB_USER=<username>
export MB_DB_PASS=<password>
export MB_DB_HOST=localhost
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar

Metabase 不會為您建立 Postgres 資料庫。建立資料庫的範例命令

createdb --encoding=UTF8 -e metabase

如果您有其他參數,Metabase 也支援提供完整的 JDBC 連線字串

export MB_DB_CONNECTION_URI="jdbc:postgresql://127.0.0.1:5432/metabase?user=<username>&password=<password>"
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar

如果您想要從 JDBC 連線字串分開傳遞連線 URI、使用者和密碼憑證(如果密碼包含特殊字元,則非常有用),您可以搭配 MB_DB_USERMB_DB_PASS 變數使用 MB_DB_CONNECTION_URI 環境變數

export MB_DB_CONNECTION_URI="jdbc:postgresql://127.0.0.1:5432/metabase"
export MB_DB_USER=<username>
export MB_DB_PASS=<password>
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar

MySQL 或 MariaDB

我們建議 PostgreSQL,但您也可以使用 MySQLMariaDB

最低建議版本為 MySQL 8.0.17 或 MariaDB 10.2.2。utf8mb4 字元集為必要。

我們不支援 ApsaraDB MySQL。您可以改為使用 ApsaraDB PostgreSQL。

您可以使用如下的環境變數將應用程式資料庫變更為使用 MySQL

export MB_DB_TYPE=mysql
export MB_DB_DBNAME=metabase
export MB_DB_PORT=3306
export MB_DB_USER=<username>
export MB_DB_PASS=<password>
export MB_DB_HOST=localhost
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar

Metabase 不會為您建立此資料庫。建立資料庫的範例 SQL 陳述式

CREATE DATABASE metabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

以下命令會告知 Metabase 使用提供的 MySQL 連線資訊來尋找其應用程式資料庫。如果您有其他參數,Metabase 也支援提供完整的 JDBC 連線字串

export MB_DB_CONNECTION_URI="jdbc:mysql://127.0.0.1:3306/metabase?user=<username>&password=<password>"
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar

與 Postgres 相同,如果您想要從 JDBC 連線字串的其餘部分分開傳遞 MB_DB_CONNECTION_URIMB_DB_USER 和/或 MB_DB_PASS 中的一項或多項,也可以搭配使用這些變數

export MB_DB_CONNECTION_URI="jdbc:mysql://127.0.0.1:5432/metabase"
export MB_DB_USER=<username>
export MB_DB_PASS=<password>
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar

H2 應用程式資料庫

對於 Metabase 的生產環境安裝,我們建議使用者將預設的 H2 資料庫替換為 PostgreSQL。Postgres 提供更高的效能和可靠性。

預設情況下,Metabase 隨附 H2 資料庫,以便在本機電腦上輕鬆示範 Metabase。在生產環境中避免使用此預設資料庫

如果在啟動 Metabase 時,您未提供指定生產資料庫連線詳細資訊的環境變數,Metabase 將嘗試在與 Metabase JAR 相同的目錄中建立新的 H2 資料庫。

H2 是基於檔案的資料庫,您可以從終端機看到這些 H2 資料庫檔案

ls metabase.*

您應該會看到以下檔案

metabase.db.h2.db  # Or metabase.db.mv.db depending on when you first started using Metabase.
metabase.db.trace.db

如果您想要在特定目錄中使用 H2 資料庫檔案,請使用 MB_DB_TYPEMB_DB_FILE 環境變數

export MB_DB_TYPE=h2
export MB_DB_FILE=/the/path/to/my/h2.db
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar

請注意,H2 會自動將 .mv.db.h2.db 附加到您指定的路徑;請在路徑中排除這些副檔名!換句話說,MB_DB_FILE 應該類似 /path/to/metabase.db,而不是類似 /path/to/metabase.db.mv.db(即使後者是 Metabase 將建立的檔案)。

從 H2 移轉

如果您已開始使用預設的 H2 資料庫,但想要保留您建立的內容並移至生產應用程式資料庫,Metabase 提供有限的支援,可從 H2 移轉至 PostgreSQL

從 Metabase 0.38 之前的版本升級

如果您是從舊版 Metabase 升級,請注意在 Metabase 0.38 中,我們已移除 PostgreSQL NonValidatingFactory 用於 SSL 驗證。您可能會在啟動時(如果您使用的是 PostgreSQL 應用程式資料庫)或在查詢 PostgreSQL 資料倉儲時遇到失敗。

您可以透過以下兩種方式之一解決此失敗

  1. 設定 PostgreSQL 連線以使用 SSL 憑證驗證,
  2. 或手動啟用 NonValidatingFactory。警告:此方法不安全。我們在此處包含此方法僅是為了協助疑難排解,或用於安全性不是優先考量的情況。

您如何設定連線取決於您是將 Postgres 用作 Metabase 的應用程式資料庫,還是用作連線至 Metabase 的資料倉儲

Postgres 應用程式資料庫的 SSL 憑證驗證

若要使用 SSL 憑證驗證,您需要使用 MB_DB_CONNECTION_URI 環境變數來設定您的資料庫連線。以下是一個範例

export MB_DB_CONNECTION_URI="postgres://127.0.0.1:5432/metabase?user=<username>&password=<password>&sslmode=verify-ca&sslrootcert=<path to CA root or intermediate root certificate>"

如果您無法啟用憑證驗證,您可以為您的應用程式資料庫啟用 NonValidatingFactory

export MB_DB_CONNECTION_URI="postgres://127.0.0.1:5432/metabase?user=<username>&password=<password>&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory"

Postgres data warehouse 資料庫的 SSL 憑證驗證

將以下內容新增到您資料庫的 JDBC 連接字串末端

&sslmode=verify-ca&sslrootcert=<path to CA root or intermediate root certificate>

如果失敗,您可以啟用 NonValidatingFactory,方法是將以下內容新增到您資料庫的連線 URI 末端

&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

如需更多選項以進一步調整 SSL 連線參數,請參閱 PostgreSQL SSL 用戶端文件

延伸閱讀

閱讀其他Metabase 版本的文件。