Navicat本身不支持真正定时结构比对,必须通过系统级调度器(如Windows任务计划程序)调用navigator.exe执行已保存的.nsx/.ncx Profile文件;需在结构同步向导末页点击“Save Profile”导出,不可直接点“运行”,且命令行路径含空格时须加英文双引号。
Navicat 本身不支持真正的定时结构比对,所有“自动运行”功能都依赖客户端前台活跃——关掉软件或切到后台就停摆。必须用系统级调度器(Windows 任务计划程序 / macOS launchd / Linux cron)驱动命令行工具执行已保存的比对任务。
必须先导出为 .nsx 或 .ncx 文件才能被命令行调用
gui 中点“结构同步”→完成比对→看到部署脚本后,**不能点“运行”**,否则状态丢失、无法复用。
正确操作是点击向导末页的 save profile(navicat 15+)或右键任务标签页 → 导出任务(navicat premium),保存为 prod_schema_daily.nsx 或 dev_vs_staging_struct.ncx。
该文件只存连接信息、比对范围和选项(如是否比对注释、外键、索引),不包含实际 ddl,可 git 管理。
- 文件路径含空格时,命令行中必须用英文双引号包裹
- 若导出失败且提示
No differences,说明比对未真正完成——需先确保状态栏显示Differences found或明确的比对结果 - Navicat 15 及以下版本生成的旧格式文件,
navigator.exe可能报Invalid profile file
Windows 下用 navigator.exe + 任务计划程序触发
Navicat Premium / for MySQL 15+ 安装后自带 navigator.exe(不是 navicat.exe),它是唯一支持结构同步命令行执行的入口。
测试命令:"C:\Program Files\PremiumSoft\Navicat Premium 16\navigator.exe" -sync "D:\jobs\prod_schema_daily.nsx"
- 报错
Failed to load connection:大概率是连接中勾选了Save password;必须改回连接属性里填明文密码(仅限内网可信环境) - 任务计划中务必勾选 使用最高权限运行,否则 UAC 可能拦截数据库连接
-
不要勾选 “不管用户是否登录都要运行”——
navigator.exe依赖当前用户的图形会话,无桌面会话时会静默失败
macOS/Linux 用户没有稳定命令行路径
Navicat 16+ 的 macOS/Linux 版附带的是 navicat CLI 工具,但它完全不支持 -sync 或 -runjob 参数运行 .nsx/.ncx 文件。
官方未提供替代方案,强行用 CrossOver 或虚拟机成本高、维护难。
- 可行替代:用
mysqldump --no-data+pg_dump -s等原生工具导出结构,再用diff或 Python 脚本比对 SQL 文本 - 若必须用 Navicat 的智能逻辑(如忽略注释差异、处理外键顺序),只能退回到 Windows 环境执行
- 注意:macOS 上
launchd或crontab -e触发的进程默认无 GUI 上下文,直接调open -a "Navicat"也无法自动点“生成报告”
比对结果无法自动生成 HTML 报告
navigator.exe 执行后只会弹窗展示差异,但不会自动点击 Generate Report——这是纯 GUI 行为,命令行不可控。
所谓“导出 HTML”,本质是人工在弹窗中点一次按钮,无法自动化。
- 真·自动化方案:在结构同步任务中勾选
Save as SQL File,导出sync.sql,再用 Python/Shell 解析它提取变更项,生成轻量 HTML - 若坚持用原生 HTML,只能配合
AutoHotKey(Windows)模拟鼠标点击,但系统更新、分辨率变化、窗口焦点偏移都会导致失败 - 容易被忽略的关键点:
Compare column comments等高级选项必须手动启用,否则字段注释差异会被静默跳过


















