配置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_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 -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 -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_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 -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_TYPE
和MB_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 数据仓库时遇到失败。
您可以通过以下两种方式之一解决此失败
- 配置 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 版本的文档。