Navicat 无原生定时同步功能,必须通过操作系统级调度(如Windows Task Scheduler调用navigator.exe、macOS/Linux用cron调navicat CLI)驱动已保存的.ns x配置文件执行;需先保存为Profile并填明文密码,否则命令行无法加载连接,且增量同步依赖时间戳字段或自定义标记锚点。
Navicat 本身没有真正的“定时同步”功能
点开 tools → data synchronization 走完向导、点“开始同步”,这只是手动执行一次。所谓“自动运行”界面里拖任务、设时间,本质是 navicat 客户端在前台运行时的轮询检查——关掉软件、切到其他窗口、锁屏,任务就停摆。这不是故障,是设计如此。
真正能每天凌晨准时触发的,只有操作系统级调度:Windows 用 Task Scheduler 调 navigator.exe,macOS/Linux 用 cron 或 launchd 调 navicat CLI(仅 v16+ 支持),且必须依赖已保存的 .nsx 配置文件。
必须先保存为 Profile(.nsx 文件),否则命令行无法调用
同步向导最后一步,不勾选“另存为作业”或没点 Save Profile,就不会生成可被调度的 .nsx 文件。常见错误是点完“开始同步”就关窗口,结果去“自动运行”列表里拖不到任何东西,计划永远为空。
保存时注意:
- 起名带业务含义,比如
prod_to_test_orders_daily.nsx,别用默认名 - 路径尽量避免中文和空格;若含空格,命令行中必须用英文双引号包裹完整路径
- Windows 下 .nsx 默认存在
%APPDATA%\PremierSoft\Navicat\Profiles\,但你不需要手动找——只要能在 GUI 的“自动运行”界面拖进去,说明保存成功
命令行执行失败,90% 出在连接认证和权限上
Windows 示例命令:navigator.exe -sync "D:\Sync\prod_to_test_orders_daily.nsx"。报错 Failed to load connection,大概率是因为 .nsx 里用了“保存密码”,而命令行模式无法读取 Windows 凭据管理器。
解决办法:
- 在同步配置的连接属性中,取消勾选
Save password,改填明文密码(仅限内网可信环境) - Windows 任务计划中,右键任务 → 属性 → 勾选
使用最高权限运行和不管用户是否登录都要运行;否则可能连数据库都连不上,错误码常为0x1 - macOS/Linux 用户慎用
sudo crontab -e,Navicat 的 GUI 连接配置对 root 不可见;应改用当前登录用户的crontab -e
增量同步不能只靠界面上勾选“仅插入新记录”
Insert records only 只是行为开关,不是智能识别增量的魔法。它不会自动记住上次执行时间,也不会扫描源表变化标记——全量数据都会被当“新”插入,极易引发主键冲突。
真要每天只同步新增/更新的数据,必须有锚点:
- 在源表加
updated_at字段,并确保业务逻辑准确更新它;然后在同步向导 Step 1 点Filter,写WHERE updated_at > ?——这个?在保存为 Profile 后的自动运行中,才会被替换成上一次成功执行的时间戳 - 没有时间戳字段的老系统,得自己加标记字段如
is_synced TINYINT DEFAULT 0,同步后用自定义 SQL 把这批记录的is_synced设为 1 - 跨库同步(如 Oracle → SQL Server)时,
updated_at类型映射必须人工核对,比如 Oracle 的TIMESTAMP WITH TIME ZONE和 SQL Server 的DATETIME2是否兼容,否则时间值会截断或错位
最易被忽略的一点:同步任务里的“比较模式”选错,会导致目标库已有修改被静默覆盖。比如测试库人工改过客户备注,若用“逐行比较”+“Update records”,这条备注就会被生产库原样打回。要不要更新、以谁为准,得在配置阶段就明确,而不是等凌晨跑崩了再查日志。











