navicat 无真正定时能力,需依赖系统级调度工具调用命令行执行已保存的 .ncx 同步任务;仅 premium 或指定数据库版 15+ 支持命令行,须手动配置同步逻辑、选对模式(如“仅主键匹配”)、静默测试并设置计划任务权限与日志。
navicat 本身没有真正的定时能力——所谓“自动运行”只在软件前台打开时有效,关掉窗口或锁屏就停摆。稳定可行的定时同步,必须靠系统级调度工具驱动命令行执行已保存的同步任务。
确认你用的是支持命令行同步的版本和授权
不是所有 Navicat 15 都能定时同步:navicat.exe(Windows)或 navicat(macOS/Linux)命令行工具仅随 Navicat Premium 或 Navicat for MySQL/PostgreSQL 15+ 发布;Essentials 和未激活的 Premium 版本压根不带该工具。若你在安装目录下找不到 navicat.exe 或 navigator.exe,或图形界面中「计划」标签页消失、「添加到计划」按钮灰掉,基本可以确定是版本或授权问题。
先手动建好同步任务并导出为 .ncx 文件
命令行只能执行已保存的配置,不能现场传参构建逻辑。务必先在 GUI 中完整走一遍:工具 → 数据同步,设置源库与目标库连接(注意两库的 Character set 必须一致,比如都设为 utf8mb4),然后在「选项」中勾选关键项:
-
忽略不存在的表:避免因目标库缺某张表导致整个任务中断 -
跳过具有相同数据的记录:减少无谓写入 -
启用外键检查:防止出现Cannot add or update a child row错误 -
隐藏进度窗口(在「高级」设置里):否则后台执行时会弹 GUI 窗口并卡死
最后点击「保存」生成一个 .ncx 文件——这是后续命令行调用的唯一入口,路径中含空格必须用英文双引号包裹。
用系统计划任务调用命令行真正跑起来
Windows 下推荐用「任务计划程序」,macOS 用 launchd,Linux 用 systemd timer 或 cron。核心命令示例如下:
Windows:navicat.exe --sync "C:\SyncTasks\orders.ncx"
macOS:/Applications/Navicat\ Premium.app/Contents/MacOS/navicat --sync "/Users/me/SyncTasks/orders.ncx"
关键点:
- 首次运行前务必测试命令是否能在 cmd / Terminal 中静默成功(不弹窗、返回 0)
- 任务属性中必须勾选「不管用户是否登录都要运行」和「使用最高权限运行」,否则常见
Permission denied或Failed to load job - 建议加日志重定向:
navicat.exe --sync task.ncx >> sync.log 2>&1,方便排查静默失败 - macOS/Linux 用户注意:
navicatCLI工具不支持--sync参数,别白费劲;若没navicat可执行文件,说明你装的是 Essentials 或授权异常
同步模式选错会导致数据被静默覆盖
Navicat 默认的「结构 + 数据」比对模式,在跨环境同步时极其危险——它会把目标库中你手动加的字段、索引、注释全删掉,只留和源库一模一样的结构。实际中多数人只需要增量追加(比如每天同步订单表新增记录),应改用「仅主键匹配」模式:
- 存在主键则跳过,不存在则插入,安全可控
- 避免「逐行比较」:10 万行以上就明显卡顿,且要求源/目标表都有主键或唯一索引
- 慎用「时间戳字段」模式:依赖
updated_at字段准确更新,老系统往往不满足
真正难的不是点几下保存,而是想清楚你要同步什么、覆盖什么、保留什么——同步逻辑一旦写进 .ncx 并被计划任务反复执行,错误配置会在无人察觉时持续污染目标库。











