mysqldiff 是唯一能稳定生成可读 HTML 差异报告的官方跨库结构比对工具需显式指定不同 host/port 的 server1/server2支持字段级解析默认不检查库级字符集需手动核验。用 mysqldiff 生成跨库结构差异报告最稳直接上结论mysql官方工具 mysqldiff 是目前唯一能稳定输出可读 html 差异报告的跨库结构比对方案不用写脚本、不依赖 python 包、不碰 sql 解析器。它本质是 MySQL Utilities 套件里的命令行工具底层走的是 SHOW CREATE TABLE 字段级解析不是靠 INFORMATION_SCHEMA 粗暴对比所以能识别默认值变更、注释差异、索引顺序变化这些容易被忽略的点。常见错误现象mysqldiff 报错 Access denied for user 不是因为权限不够而是没给 --server1 和 --server2 显式指定用户哪怕都是 root必须带 user:passhost:port 格式另外两个库不能在同一个实例里用不同 database 名来“模拟跨库”它强制要求物理分离不同 host 或 port。安装方式MySQL 5.7 自带8.0 需单独装 mysql-utils 包Debian/Ubuntu 装 mysql-utilitiesCentOS/RHEL 用 mysql-community-utils基础命令mysqldiff --server1root:pass10.0.1.10:3306 --server2root:pass10.0.2.10:3306 db1:db2 --changes-forserver2 --difftypehtml diff.html--changes-forserver2 表示“以 server2 为目标库列出让它变成 server1 需要执行的 DDL”——这点反直觉但决定了生成的 SQL 是否可直接执行HTML 输出里所有表名、字段名、SQL 片段都自动加了 code 标签不用再加工mysqldiff 不支持同实例跨 database 的真实原因它不是偷懒是设计使然当 --server1 和 --server2 指向同一 IP端口时mysqldiff 会拒绝运行并报错 Servers must be different。这不是 bug是为避免误把同一份数据当成两套源来比对。实际迁移中常遇到“老库在旧实例新库刚建在新实例”这时必须确保两个 --serverX 参数的 host/port 完全不同。如果测试环境只有单实例得用 Docker 启一个临时 MySQL 实例或改 host 文件伪造两个域名指向同一 IPport 必须不同。立即学习“前端免费学习笔记深入” 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。