配置 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://127.0.0.1:5432/metabase?user=<username>&password=<password>"
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar
如果您想从 JDBC 连接字符串中单独传递连接 URI、用户和密码凭据(如果密码包含特殊字符,则很有用),您可以将 MB_DB_CONNECTION_URI
环境变量与 MB_DB_USER
和 MB_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 --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://127.0.0.1:3306/metabase?user=<username>&password=<password>"
java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar
与 Postgres 相同,如果您想从 JDBC 连接字符串的其余部分单独传递一个或两个,MB_DB_CONNECTION_URI
也可以与 MB_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 --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 版本 pre-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://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 版本的文档。