配置 Metabase 应用程序数据库
应用程序数据库是 Metabase 存储用户信息、问题、仪表盘以及运行 Metabase 应用程序所需的其他数据的地方。此应用程序数据库与您存储数据(也称为数据仓库)的数据库不同。有关连接到数据仓库的信息,请参阅连接到受支持的数据库。
对于生产环境,我们建议使用 PostgreSQL 作为 Metabase 应用程序数据库。
- PostgreSQL (推荐用于生产环境)
- MySQL 或 MariaDB (也可用于生产环境)
- H2 (本地演示默认值 - 生产环境请避免使用)
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_USER
和 MB_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,但您也可以使用 MySQL 或 MariaDB。
推荐的最低版本是 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_TYPE
和 MB_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 数据仓库时遇到失败。
您可以通过以下两种方式之一解决此故障:
- 配置 PostgreSQL 连接以使用 SSL 证书验证,
- 或者手动启用
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 版本的文档。