MySQL

我们建议使用MySQL版本8.0.33或更高版本。

要添加数据库连接,请单击右上角的齿轮图标,然后转到“管理设置”>“数据库”>“添加数据库”。

设置

您可以在任何时间编辑这些设置。只需记住保存您的更改。

显示名称

在Metabase界面中数据库的显示名称。

主机

您的数据库的IP地址,或其域名(例如,esc.mydatabase.com)。

端口

数据库端口。例如,3306。

用户名

您想用于连接数据库的账户的数据库用户名。您可以使用不同的用户账户连接到同一数据库,每个账户都有不同的权限集合,以设置多个连接。

密码

您用于连接数据库的用户名的密码。

使用安全连接(SSL)

您可以将服务器的SSL证书链粘贴在此处。

使用SSH隧道

查看我们的SSH隧道指南

展开JSON列

对于MySQL数据库,Metabase可以将JSON列展开为组件字段,从而生成一个表,其中每个JSON键都成为一个列。JSON展开默认开启,但您可以在性能较慢时关闭JSON展开。

如果您开启JSON展开,您也可以在表元数据中切换单个列的展开。

额外的JDBC连接字符串选项

您可以将选项追加到Metabase用于连接数据库的连接字符串中。

重新运行查询进行简单探索

如果人们希望在应用任何汇总或筛选选择之前点击运行(播放按钮),请将此选项关闭

默认情况下,Metabase将在您从汇总菜单中选择分组选项或从钻取菜单中选择筛选条件时立即执行查询。如果您的数据库较慢,您可能希望禁用重新运行以避免每次点击都加载数据。

选择Metabase同步和扫描的时间

将此选项开启以管理Metabase用于与数据库保持同步的查询。更多信息,请参阅同步和扫描数据库

数据库同步

如果您已选择选择同步和扫描发生的时间 > 开启,您将能够设置:

  • 同步的频率:每小时(默认)或每日。
  • 运行同步的时间,以您的Metabase应用所在服务器的时区为准。

扫描筛选值

Metabase可以扫描此数据库中每个字段中的现有值,以在仪表板和问题中启用复选框筛选。这可能是一个资源密集型的过程,尤其是如果您有一个非常大的数据库。

如果您已选择选择同步和扫描发生的时间 > 开启,您将在扫描筛选值下看到以下选项:

  • 定期,按计划允许您以与数据库更改速率匹配的频率运行扫描查询。时间设置在您的Metabase应用所在服务器的时区。这是小型数据库或经常更新的具有独特值的表的最好选项。
  • 仅当添加新的筛选组件时是一个很好的选项,如果您希望扫描查询按需运行。将此选项开启表示Metabase仅会在向仪表板或SQL问题添加新筛选时扫描和缓存字段(或字段)的值。
  • 从不,如果需要我将手动完成是针对那些非常大或几乎从未添加新值的数据库的选项。使用现在重新扫描字段值按钮来运行手动扫描,并将筛选值更新到最新。

定期重新指纹表

定期指纹化会增加您数据库的负载。

将此选项开启以在Metabase每次运行同步时扫描样本值。

指纹化查询将检查每个列的前10,000行,并使用这些数据来估计每个列有多少唯一值,数值和日期时间列的最小值和最大值是多少,等等。如果您将此选项关闭,Metabase在设置期间只会对您的列进行一次指纹化。

连接到MySQL 8+服务器

Metabase使用MariaDB连接器连接到MySQL服务器。MariaDB连接器不支持MySQL 8的默认身份验证插件。为了连接,您需要更改Metabase用户使用的插件。

mysql_native_password`: `ALTER USER 'metabase'@'%' IDENTIFIED WITH mysql_native_password BY 'thepassword';

无法使用正确凭据登录

如何检测:Metabase无法连接到您的MySQL服务器,错误信息为“看起来用户名或密码不正确”,但您确信用户名和密码是正确的。您可能已创建MySQL用户,其允许的主机不同于您连接的主机。

例如,如果MySQL服务器在Docker容器中运行,并且您的metabase用户是通过以下命令创建的:CREATE USER 'metabase'@'localhost' IDENTIFIED BY 'thepassword';,则localhost将被解析为Docker容器,而不是主机机器,从而导致访问被拒绝。

您可以通过查看Metabase服务器日志中的错误信息来识别此问题

Access denied for user 'metabase'@'172.17.0.1' (using password: YES).

注意主机名172.17.0.1(在这种情况下是一个Docker网络IP地址),以及末尾的using password: YES

当尝试使用命令行客户端连接到MySQL服务器时,您将看到相同的错误信息:mysql -h 127.0.0.1 -u metabase -p

如何修复:重新创建MySQL用户并指定正确的主机名

CREATE USER 'metabase'@'172.17.0.1' IDENTIFIED BY 'thepassword';

否则,如果需要,可以使用通配符为主机名设置

CREATE USER 'metabase'@'%' IDENTIFIED BY 'thepassword';

需要设置该用户的权限

GRANT SELECT ON targetdb.* TO 'metabase'@'172.17.0.1';
FLUSH PRIVILEGES;

请记住删除旧用户

DROP USER 'metabase'@'localhost';

同步包含JSON的记录

Metabase将根据表的前五百行中的键推断JSON“模式”。 MySQL JSON字段缺乏模式,因此Metabase无法依赖于表元数据来定义JSON字段具有哪些键。为了解决缺乏模式的问题,Metabase将获取前五百条记录,并解析这些记录中的JSON以推断JSON的“模式”。Metabase限制自己只到五百条记录的原因是,同步元数据不会对您的数据库造成不必要的压力。

问题是,如果JSON中的键因记录而异,前五百行可能无法捕获该JSON字段中所有JSON对象使用的所有键。为了使Metabase推断出所有JSON键,您需要在第一行五百个JSON对象中添加额外的键。

启动MySQL 8+的Docker容器

如果您正在启动一个新的MySQL容器,并且

  • 希望Metabase能够连接到容器,而无需手动创建用户或更改身份验证机制,
  • 或者您遇到一个错误:RSA 公钥不可用(客户端,未设置 serverRsaPublicKeyFile 选项)

在运行容器时使用 ['--default-authentication-plugin=mysql_native_password'] 修饰符,例如

  • 一个简单的 docker run 命令:docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xxxxxx mysql:8.xx.xx --default-authentication-plugin=mysql_native_password

  • 或者在 docker-compose 中

mysql:
  image: mysql:8.xx.xx
  container_name: mysql
  hostname: mysql
  ports:
    - 3306:3306
  environment:
    - "MYSQL_ROOT_PASSWORD=xxxxxx"
    - "MYSQL_USER=metabase"
    - "MYSQL_PASSWORD=xxxxxx"
    - "MYSQL_DATABASE=metabase"
  volumes:
    - $PWD/mysql:/var/lib/mysql
  command: ["--default-authentication-plugin=mysql_native_password"]

基于 Vitess 的数据库的限制

当查询 Vitess 数据库时,应在每个子查询中添加一个 LIMIT 子句。

原因:通常,Metabase 会对最终查询结果应用限制(例如,2000 或 10000 行)。但由于 Vitess 中已知的一个错误,Vitess 可能将这些限制应用于子查询,这可能导致意外结果。解决方案是在每个子查询中添加限制。

进一步阅读

阅读关于 Metabase 其他 版本 的文档。

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