OpenMetadata 连接 MySQL 采集元数据完整指南:从 0 到血缘可视化的 3 步实践
【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata
把散落在各张 MySQL 表里的元数据,一次性搬到 OpenMetadata 里,其实只需要三步:备好权限、写一份 YAML、跑一条 CLI 命令。整个过程不用手写 SQL,也不用碰数据库内核——你只需要一个有权限的账号和一台能访问 MySQL 的机器。
下面按真实上手顺序走一遍:先搭好环境,再把采集跑通,然后看看它除了"导表结构"之外还顺手帮你做了什么(视图血缘、数据预览、增量采集)。最后附上最常见的几个报错和排查路径。
先看环境要求,90% 的失败都出在这里
采集失败时,十有八九不是配置写错,而是账号权限不够或网络不通。开工前先确认三件事:
- 版本:MySQL 8.0+ 最省心,事务和高阶数据类型支持完整(OpenMetadata 自身的后端也默认用 MySQL,Flyway 负责 schema 迁移,初始化逻辑可参考 docker/mysql/mysql-script.sql);
- 权限:采集账号除了库表权限外,必须额外拥有 PROCESS 和 USAGE 全局权限,否则连接阶段就会报权限错误;
- 字符集:库表用 utf8mb4,避免 emoji 和特殊符号在元数据里变乱码。
权限脚本的关键两行长这样:
GRANT ALL PRIVILEGES ON openmetadata_db.* TO 'openmetadata_user'@'%'; GRANT PROCESS, USAGE ON *.* TO 'openmetadata_user'@'%';第二行是最容易被漏掉的。如果你的库是共享环境,让 DBA 单独授权即可,不需要动已有账号。
连接怎么配:一份能直接跑的 YAML
OpenMetadata 通过采集工作流(ingestion workflow)对接 MySQL,配置就是一个 YAML 文件。仓库里已经带了一份完整示例:ingestion/src/metadata/examples/workflows/mysql.yaml,你可以复制后改掉连接信息直接上手。核心结构如下:
source: type: mysql serviceName: local_mysql serviceConnection: config: type: Mysql username: openmetadata_user authType: password: openmetadata_password hostPort: localhost:3306 databaseSchema: openmetadata_db sourceConfig: config: type: DatabaseMetadata sink: type: metadata-rest config: {}几个要点说明一下:
source.type填mysql,对应的是 MySQL 连接器源码(MysqlSource类),它继承自通用关系库采集器,所以表、视图、存储过程、列注释这些都会自动采集;sourceConfig.type用DatabaseMetadata表示"只要元数据";后面想跑数据探查,把它换成Profiler并指定schemaFilterPattern即可,官方示例在 mysql_profiler.yaml;- 文件末尾的
workflowConfig里要填 OpenMetadata Server 地址和一个有效的 JWT Token(在 UI 的 API 页面生成)。
配置好之后,一条命令跑起来:
metadata ingest -c mysql_ingestion_config.yaml跑完后打开 OpenMetadata 的 Explore 页面,你的库、表、列应该都躺在里面了。
采集范围如何圈定:不想全量采集就用过滤
生产库里往往混着临时表、同步表、废弃表,全量采集既慢又吵。OpenMetadata 支持三组过滤规则,全部用通配符写:
| 参数 | 作用 | 示例 |
|---|---|---|
includeSchemas | 按库圈范围 | openmetadata_db.* |
includeTables | 按表名追加 | entity_* |
excludeTables | 按表名排除 | .*bot.* |
写在sourceConfig.config下面就行,比如只采openmetadata_db库、排除名字带bot的表,效果就是"该库全部表,但临时表除外"。注意 include 和 exclude 是叠加生效的,exclude 优先级更高——配置前先想清楚规则顺序,避免"加了 include 反而少采了"的困惑。这套行为在 MySQL 采集测试用例 里有完整断言,想验证自己的过滤规则是否符合预期,照着测试里的预期数量对一下最直观。
它顺带帮你做的事:视图血缘和数据预览
采集不只是把表结构搬过来,OpenMetadata 会解析视图定义并自动建立血缘。比如你建了一个视图:
CREATE VIEW view_persons AS SELECT * FROM openmetadata_db.persons;采集完成后,view_persons和persons之间会自动生成逐列的血缘关系——官方测试用例里,一个 22 列的视图正好产生 22 条列级血缘,你点进视图详情页就能看到每张基础表、每个来源字段。排查"这个字段到底从哪来"这类问题时,这一步能省掉大量翻 SQL 的时间。
另外,采集时会按配置对表做数据采样(默认几行),所以你在 UI 里点进任何一张表,不登数据库客户端就能直接看到样本数据和列类型。官方测试用的persons表覆盖了 MySQL 常见的 22 种原生类型(INT/DECIMAL/DATETIME/ENUM/BLOB……),采集后类型映射一列列展示在 UI 上,对新手判断"这张表的字段到底是什么类型"很友好。
排障与调优:报错先看这三处
采集报错时按这个顺序查,基本能覆盖所有情况:
- 权限:
SHOW GRANTS FOR 'your_user'@'host';确认输出里同时有库表权限和PROCESS, USAGE,缺一个都会报权限错误; - 网络:在跑采集的机器上
telnet <host> 3306,确认端口可达;内网部署时注意采集进程和 MySQL 之间的防火墙/安全组; - 日志:把
workflowConfig.loggerLevel调成DEBUG重跑一次,日志会精确到是哪张表、哪条查询失败。
调优方面,表多的大库建议开增量采集:在sourceConfig.config下加lastModifiedFilter(如30 days ago),只采最近变更过的表,第二次以后跑一遍的时间能降到原来的几分之一。连接数多的环境也可以调大连接池参数,避免采集高峰期挤占数据库连接。
行动清单
- 今天就能做:复制 mysql.yaml 示例,填入你的连接信息和 JWT Token,跑通
metadata ingest -c,在 Explore 页面确认表已入库; - 本周安排:给核心库配
excludeTables排除临时表,并开启lastModifiedFilter增量采集,挂到定时任务里(Airflow 或 crontab 均可); - 接下来补齐:为高频表指定负责人、加上业务描述和术语标签,再挑一张核心表跑一次 Profiler(见 mysql_profiler.yaml),让数据预览和质量检查也跑起来。
做到这三步,你的 MySQL 就从一个"只有 DBA 知道结构"的黑盒,变成了全团队可搜索、可追溯、可协作的数据资产。
【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考