navicat本身不支持真正后台定时同步,必须用系统级调度工具调用命令行接口执行已保存的.nsx作业;需先在gui中完成同步向导并显式保存为profile,再通过navigator.exe(windows)或navicat-cli(macos/linux)调用,且密码须明文配置、权限须正确设置。
navicat 本身不支持真正意义上的后台定时同步——所谓“自动运行”功能只在客户端前台运行时有效,关掉窗口或切到其他应用就停摆。稳定可行的方案只有用系统级调度工具(windows 任务计划程序 / macos cron / linux systemd timer)调用 navicat 命令行接口执行已保存的同步作业。
怎么导出并验证 .nsx 同步作业文件
必须先在 GUI 中完整走完一次同步向导,并显式保存为 Profile,否则命令行无法加载。这不是可选步骤,是硬性前提。
- 在
Data Synchronization向导最后一步,务必勾选 “另存为作业”(Save as Profile),命名如dev_to_prod_orders_daily.nsx - 保存路径默认在
%APPDATA%\PremierSoft\Navicat\Profiles\(Windows)或~/Library/Application Support/PremierSoft/Navicat/Profiles/(macOS),但你不需要手动找——只要能在「自动运行」界面拖入该任务,就说明保存成功 - 立即测试命令行能否加载:在终端运行
navigator.exe -sync "C:\path\to\dev_to_prod_orders_daily.nsx"(Windows)或navicat -runjob "/path/to/dev_to_prod_orders_daily.nsx"(macOS/Linux,仅 Navicat 16+ 支持-runjob) - 若报错
Failed to load connection,大概率是 .nsx 里用了 Windows 凭据管理器保存的密码;解决办法:回 GUI 编辑该同步任务,在连接属性中取消勾选 Save password,改填明文密码(仅限内网可信环境)
Windows 下用任务计划程序驱动 navigator.exe
这是目前最稳定、零依赖、无需额外安装组件的方案。关键不是“能不能跑”,而是“能不能静默、可靠、带权限地跑”。
- 把命令封装成
.bat脚本,例如:navigator.exe -sync "D:\Navicat\Profiles\dev_to_prod_orders_daily.nsx" -log "D:\Navicat\Logs\sync_log.txt"
- 在任务计划程序中新建基本任务,触发器设为每天 2:00;操作 → 启动程序 → 指向你的
.bat文件 - 右键任务 → 属性 → 勾选 “使用最高权限运行” 和 “不管用户是否登录都要运行”;否则常见失败码
0x1或Permission denied - 注意:如果目标库是生产环境,且连接启用了 SSL,确保
navigator.exe所在机器信任对应 CA 证书;否则连接会静默中断,日志里只显示Connection refused类似模糊提示
为什么“仅插入新记录”不等于增量同步
Navicat 的 Insert records only 是行为开关,不是智能判断逻辑。它不会自动识别“哪些是新的”,全靠你提供锚点。没锚点,就是伪增量。
- 必须在同步向导 Step 1 的
Options中取消勾选Delete records和Update records,只留Insert records - 点击
Filter,写 SQL 条件,例如WHERE updated_at > ?——这个?会被 Navicat 自动替换成上一次成功执行的时间戳,但**仅在保存为 Profile 并通过系统调度运行时生效** - 如果源表没有
updated_at或created_at且严格递增、非空,就得自己加字段,比如is_synced TINYINT DEFAULT 0;同步后用自定义查询更新它:UPDATE orders SET is_synced = 1 WHERE is_synced = 0 - 跨库字符集不一致(如源库 utf8mb4,目标库 latin1)会导致中文变问号,但任务仍显示“成功”;务必在两个连接的属性 → 高级 → 字符集里统一设为
utf8mb4
macOS/Linux 用户绕不开的 CLI 限制
Navicat 16+ 的 macOS/Linux CLI 工具 navicat 不支持直接运行 .nsx 同步作业,-sync 参数根本不存在。别浪费时间试了。
-
navicat -backup和navicat -restore可用,但只适用于备份/还原场景 - 真要复用 Navicat 的比对逻辑,只能退回到 Windows 虚拟机或 CrossOver 中运行完整版 + 任务计划
- 更现实的替代方案:用
mysqldump --where="updated_at > '2026-04-24 02:00:00'"导出增量,再用mysql导入;配合crontab调度,同时用date -v-1d +%Y-%m-%d\ %H:%M:%S动态生成时间戳 - 若目标库是云数据库(如阿里云 RDS、腾讯云 CDB),优先考虑厂商自带的数据传输服务,它们原生支持断点续传和增量订阅,比 Navicat 更稳
最容易被忽略的是连接上下文:系统调度任务运行时,它看不到你在 Navicat GUI 里配置的连接别名或颜色标签,所有参数都固化在 .nsx 文件里。一旦连接字符串、密码、SSL 设置有变更,必须重新保存 Profile,否则调度任务永远在用旧配置连错库、连超时、连失败。











