配置Metabase应用程序数据库

应用程序数据库是Metabase存储用户账户、问题、仪表板以及其他运行Metabase应用程序所需数据的场所。

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

  • PostgreSQL(推荐用于生产)
  • MySQL(也适用于生产)
  • H2(本地演示的默认数据库 - 生产中请避免使用)

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

PostgreSQL

我们建议您使用PostgreSQL作为Metabase应用程序数据库。

您可以使用环境变量将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 -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 -jar metabase.jar

如果您想从JDBC连接字符串中分别传递连接URI、用户和密码凭证(如果密码包含特殊字符,则很有用),则可以使用MB_DB_CONNECTION_URI 环境变量MB_DB_USERMB_DB_PASS变量结合使用

export MB_DB_CONNECTION_URI="jdbc:postgresql://127.0.0.1:5432/metabase"
export MB_DB_USER=<username>
export MB_DB_PASS=<password>
java -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 -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 -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 -jar metabase.jar

H2应用程序数据库

对于Metabase的生产安装,我们建议人们用PostgreSQL替换默认的H2数据库。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 -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 的有限支持。了解如何从 H2 迁移到 PostgreSQL

从 0.38 版本之前的 Metabase 升级

如果您是从之前的 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 数据仓库 数据库的 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 版本的文档

想要改进这些文档? 提出更改。