配置 Metabase 应用程序数据库

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

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

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

PostgreSQL

我们建议您将 PostgreSQL 用于 Metabase 应用程序数据库。Metabase 支持从最旧的受支持版本到最新的稳定版本的所有 PostgreSQL 版本。请参阅 PostgreSQL 版本

您可以使用环境变量将 PostgreSQL 数据库设置为 Metabase 的应用程序数据库。例如,以下命令指示 Metabase 使用 PostgreSQL 数据库作为其应用程序数据库:

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 不会为您创建 PostgreSQL 数据库。以下是创建数据库的示例命令:

createdb --encoding=UTF8 -e metabase

如果您有其他参数,Metabase 还支持提供完整的 JDBC 连接字符串。

export MB_DB_CONNECTION_URI="jdbc:postgresql://localhost: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://localhost: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://localhost:3306/metabase?user=<username>&password=<password>"
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar

与 PostgreSQL 一样,如果您想将 MB_DB_USER 和/或 MB_DB_PASS 与 JDBC 连接字符串的其余部分分开传递,也可以将 MB_DB_CONNECTION_URI 与它们结合使用。

export MB_DB_CONNECTION_URI="jdbc:mysql://localhost: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。PostgreSQL 提供更高的性能和可靠性。

默认情况下,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。警告:此方法不安全。我们在此处包含它仅是为了协助故障排除,或在安全性不是首要考虑因素的情况下使用。

如何配置您的连接取决于您是将 PostgreSQL 用作 Metabase 的应用程序数据库,还是用作连接到 Metabase 的数据仓库。

PostgreSQL 应用程序数据库的 SSL 证书验证

要使用 SSL 证书验证,您需要使用 MB_DB_CONNECTION_URI 环境变量来配置您的数据库连接。以下是一个示例:

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

PostgreSQL 数据仓库数据库的 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 版本的文档。

© . All rights reserved.