MySQL
本页面介绍如何将 MySQL 连接为数据仓库。有关将 MySQL 用作 Metabase 的应用程序数据库,请参阅配置 Metabase 应用程序数据库。
要添加数据库连接,请点击右上角的齿轮图标,然后导航到管理员设置 > 数据库 > 添加数据库。
支持的版本
Metabase 支持最新稳定版本及之前支持的最旧版本。请参阅MySQL 已停止支持日期。
编辑连接详情
您可以随时编辑这些设置。请务必保存您的更改。
连接字符串
在此处粘贴连接字符串以预填充以下剩余字段。
显示名称
Metabase 界面中数据库的显示名称。
主机
您的数据库 IP 地址或其域名(例如,esc.mydatabase.com)。
端口
数据库端口。例如,3306。
用户名
用于连接数据库的账户的数据库用户名。您可以为同一个数据库设置多个连接,使用不同的用户账户,每个账户具有不同的权限。
密码
您用于连接数据库的用户的密码。
使用安全连接 (SSL)
您可以粘贴服务器的 SSL 证书链。
使用 SSH 隧道
请参阅我们的SSH 隧道指南。
展开 JSON 列
对于 MySQL 数据库,Metabase 可以将 JSON 列展开为组成字段,从而生成一个表,其中每个 JSON 键都成为一个列。JSON 展开默认启用,但如果性能缓慢,您可以关闭 JSON 展开。
如果启用 JSON 展开,您还可以在表元数据中为单个列切换展开功能。
附加 JDBC 连接字符串选项
您可以将选项附加到 Metabase 用于连接数据库的连接字符串。
重新运行简单探索的查询
如果用户希望在应用任何汇总或筛选选择之前单击运行(播放按钮),请将此选项关闭。
默认情况下,Metabase 会在您从“汇总”菜单中选择一个分组选项,或从下钻菜单中选择一个筛选条件后立即执行查询。如果您的数据库速度较慢,您可能希望禁用重新运行,以避免每次单击时加载数据。
选择同步和扫描发生的时间
请参阅同步和扫描。
定期重新指纹识别表
定期重新指纹识别将增加数据库的负载。
将此选项打开,以便在 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';
如果您无法连接到数据库,但用户名、主机和密码都是正确的,请尝试将 `trustServerCertificate=true` 添加到其他 JDBC 选项中。此选项将指示 Metabase 驱动程序信任服务器证书,即使它缺少根证书,从而建立安全连接。
同步包含 JSON 的记录
Metabase 将根据表中前 500 行的键来推断 JSON“模式”。 MySQL JSON 字段缺少模式,因此 Metabase 无法依赖表元数据来定义 JSON 字段的键。为了弥补模式的缺失,Metabase 将获取前 500 条记录并解析这些记录中的 JSON 以推断 JSON 的“模式”。Metabase 限制自己只处理 500 条记录的原因是,避免同步元数据对数据库造成不必要的压力。
问题在于,如果 JSON 中的键因记录而异,前 500 行可能无法捕获 JSON 对象在该 JSON 字段中使用的所有键。要让 Metabase 推断出所有 JSON 键,您需要将其他键添加到前 500 行的 JSON 对象中。
启动 MySQL 8+ 的 MySQL Docker 容器
如果您正在启动新的 MySQL 容器,并且
- 希望 Metabase 连接到容器而无需手动创建用户或更改身份验证机制,
- 或者您遇到 `RSA public key is not available client side (option serverRsaPublicKeyFile not set)` 错误,
请在运行容器时使用 `['--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 数据库(如 Planetscale)时,您应该在每个子查询中添加一个 `LIMIT` 子句。
原因:通常,Metabase 会将限制(例如 2000 或 10000 行)应用于最终查询结果。但由于 Vitess 中存在一个已知错误,Vitess 可能会将这些限制应用于子查询,这可能导致意外的结果(例如,Metabase 中不会显示所有结果行)。解决方法是为每个子查询添加限制。
-
您可能需要与托管该平台的供应商联系,因为 Vitess 在返回信息模式(information schema)的元数据时可能会遇到问题。Metabase 需要此元数据来填充其应用程序数据库;如果 Metabase 无法获取该元数据,某些字段可能不会出现(或显示为空)。
包含特殊字符的密码
如果您的密码包含非 UTF-8 字符,则可能需要在连接字符串中添加一个附加变量 `passwordCharacterEncoding=<your_encoding_here>`。这可以确保 MySQL 在身份验证期间能够理解密码中的特殊字符。
模型功能
选择是否启用与Metabase 模型相关的特性。这些特性通常需要您用于连接数据库的数据库用户帐户具有读取和写入权限。
模型操作
打开此设置以允许运行从模型创建的操作。操作可以读取、写入和删除数据。您的数据库用户将需要写入权限。
模型持久化
我们将创建包含模型数据的表,并按您定义的计划进行刷新。要启用模型持久化,您需要授予此连接的凭据对 Metabase 提供的某个模式的读写权限。
可编辑的表数据
将此设置打开以启用直接在 Metabase 中编辑表数据。启用后,管理员可以通过 Metabase 的界面创建、更新和删除表中的记录。
您的数据库连接将需要写入权限才能启用此功能。这意味着:您用于将 Metabase 连接到数据库的数据库用户帐户必须具有修改您想要设为可编辑的表中的数据的适当权限。
请参阅权限。
数据库路由
通过数据库路由,管理员可以使用一个数据库构建一次问题,然后根据查看问题的用户,该问题将在具有相同数据结构(schema)的不同数据库上运行查询。
请参阅 数据库路由。
危险区
请参阅危险区。
延伸阅读
阅读其他版本的 Metabase 的文档。