配置 Metabase 应用数据库

应用程序数据库是 Metabase 存储有关用户帐户、问题、仪表盘以及运行 Metabase 应用程序所需的任何其他信息的地方。此应用程序数据库与您存储数据的数据库(也称为数据仓库)不同。有关连接到数据仓库的信息,请参阅连接到支持的数据库

对于生产环境,我们建议使用 PostgreSQL 作为您的 Metabase 应用程序数据库。

Metabase 将在应用程序启动时读取连接配置信息。应用程序运行时,您无法更改应用程序数据库。

PostgreSQL

我们建议您为 Metabase 应用程序数据库使用 PostgreSQL。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://:5432/metabase?user=<username>&password=<password>"
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar

如果您想将连接 URI、用户和密码凭据与 JDBC 连接字符串分开提供(如果密码包含特殊字符,这很有用),您可以结合使用 MB_DB_CONNECTION_URI 环境变量MB_DB_USERMB_DB_PASS 变量

export MB_DB_CONNECTION_URI="jdbc:postgresql://: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://: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://: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://: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://:5432/metabase?user=<username>&password=<password>&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory"

Postgres 数据仓库数据库的 SSL 证书验证

将以下内容添加到您数据库 JDBC 连接字符串的末尾

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

如果这不起作用,您可以将以下内容添加到您数据库连接 URI 的末尾来启用 NonValidatingFactory

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

有关进一步调整 SSL 连接参数的更多选项,请参阅PostgreSQL SSL 客户端文档

延伸阅读

阅读其他版本的 Metabase 的文档。

这有帮助吗?

感谢您的反馈!
想改进这些文档吗?建议修改。
© . This site is unofficial and not affiliated with Metabase, Inc.