Navicat「自动运行」无法真正无人值守,必须通过Windows任务计划程序调用navigator.exe执行.ns x文件;.ns x需GUI保存且含明文密码;WHERE条件须每日手动更新或脚本动态替换,否则导致漏数或重复;macOS/Linux应弃用.ns x,改用原生工具链配合系统级调度。
Navicat 自带的「自动运行」不能真正无人值守
它只是客户端前台轮询:navicat 窗口必须保持激活、未最小化、未被系统挂起(比如锁屏或远程桌面断开),否则任务立即失效。实测中,只要用户登出、关机、甚至切换应用超 30 秒,自动运行 就不再触发。这不是 bug,是设计限制——navicat 没有后台服务进程,也不注册系统级定时器。
Windows 下唯一稳定路径:任务计划程序 + navigator.exe 调用 .nsx 文件
必须走操作系统级调度,且仅 Windows 版本支持完整同步逻辑:
-
.nsx文件必须在 Navicat Premium 16+ GUI 中完整配置后「保存为」,不能手写或改名后缀 - 命令行测试务必加英文双引号包裹含空格路径:
"C:\Program Files\PremiumSoft\Navicat Premium 16\navigator.exe" -sync "D:\sync\order_sync.nsx" - 若报
Failed to load connection,大概率是 .nsx 里勾选了Save password;需回到连接属性中填明文密码(仅限内网可信环境) - 任务计划中必须勾选:
不管用户是否登录都要运行和使用最高权限运行,否则常见Permission denied - 建议在批处理脚本中重定向日志:
navigator.exe -sync task.nsx >> sync.log 2>&1
WHERE 条件不更新 = 每天都在漏数据或重复同步
Navicat 不会自动推进时间戳或主键偏移值。你保存的 .nsx 里写的 created_at > '2026-06-01 00:00:00',第二天还是一模一样——结果要么跳过所有新数据,要么把旧数据反复插入。
- 每次同步成功后,必须手动打开 .nsx 对应的同步配置,进「表映射 → Options → WHERE condition」改时间值
- 更可靠的做法是:在外部脚本中动态生成新条件,再用文本工具(如 PowerShell 的
(Get-Content).Replace())替换 .nsx 文件里的旧时间字符串 - 避免用
updated_at BETWEEN ... AND ...区间,时区/延迟/事务提交顺序会导致边界数据丢失 - 如果源表无规范时间字段,只能退回到「仅主键匹配」模式,但该模式无法处理更新和删除
macOS/Linux 用户别硬刚 .nsx,直接换原生工具链
navicatCLI(v16+)根本不支持 -sync 或 -runjob 参数运行 .nsx 同步任务。官方没提供替代方案,强行用虚拟机或 CrossOver 成本远高于收益。
- MySQL → MySQL:用
mysqldump --where="created_at > '2026-07-26 00:00:00'"+mysql导入 - PostgreSQL → PostgreSQL:用
pg_dump --table=orders --where="created_at > '2026-07-26'"+psql - 跨库(如 MySQL→PostgreSQL):导出为 CSV,用
csvkit清洗后psql -c "\copy orders FROM stdin WITH (FORMAT csv, HEADER true)" - 所有脚本统一交给
launchd(macOS)或systemd timer(Linux)调度,避免依赖 GUI 进程


















