配置 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://: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://: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://:3306/metabase?user=<username>&password=<password>"
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar
与 Postgres 类似,如果您想将 MB_DB_USER
和/或 MB_DB_PASS
与 JDBC 连接字符串的其余部分分开传递,MB_DB_CONNECTION_URI
也可以与它们结合使用
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_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
。警告:此方法不安全。我们在此处包含它仅用于故障排除,或在安全不是优先考虑因素的情况下。
如何配置连接取决于您是将 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 的文档。