navicat 15的「自动运行」功能不可靠,仅前台运行时可能触发;稳定定时同步须用命令行+系统计划任务,且需premium 15授权、正确配置.ncx文件、连接参数及权限设置。

Navicat 15 的「自动运行」根本不能定时执行字典表同步
它只在 Navicat 客户端前台打开、未最小化、未锁屏时才可能触发,关掉软件或切到其他窗口就停摆。所谓“设置自动运行→拖入任务→点保存”那一套,对字典表这种需要稳定日更的场景完全不可靠。
真正能跑通的定时方案只有命令行 + 系统计划任务
前提是你的 Navicat 是 Premium 15(非 Essentials 或 Standard),且已激活许可——否则 navicat.exe(Windows)或 navicat(macOS/Linux)根本不会识别 --sync 参数,或者调用时报 Failed to load job。
- 先在 GUI 中建好同步:工具 → 数据同步 → 源库(生产字典库)→ 目标库(全量从库)→ 勾选「仅主键匹配」模式(避免误删人工加的备注字段)
- 在「选项」里务必取消勾选「删除记录」,字典表通常只增不删;勾选「跳过具有相同数据的记录」减少无谓写入
- 保存为
dict_sync.ncx(不是 .nsx,.nsx 是旧版或数据传输用的,同步专用是 .ncx) - Windows 下测试命令:
navicat.exe --sync "D:\Navicat\Tasks\dict_sync.ncx";macOS 下:/Applications/Navicat\ Premium.app/Contents/MacOS/navicat --sync "/Users/me/Navicat/dict_sync.ncx" - 首次运行会弹窗,必须提前在同步设置 → 高级 → 勾选「隐藏进度窗口」,否则后台执行直接失败
字符集、时区、主键一致性这三点一错,同步就静默失效
现象是任务显示“成功”,但从库字典表没更新、中文变问号、或报 Cannot add or update a child row。这不是同步逻辑问题,而是连接层配置偏差。
- 两个数据库连接的「高级」设置中,
Character set必须显式设为一致(如都填utf8mb4),不能一个留空一个填值 -
Time zone建议统一设为+00:00或目标库实际时区,避免时间字段比对错位 - 源表和目标表的主键字段名、类型、是否允许 NULL 必须严格一致;MySQL 的
TINYINT(1)和 PostgreSQL 的BOOLEAN不兼容,跨库同步字典表时宁可转成TINYINT(4)或SMALLINT - 如果目标库有外键约束,同步前需临时禁用:
SET FOREIGN_KEY_CHECKS = 0;(可在同步前脚本里加,或手动执行)
Windows 任务计划程序里这几个选项不勾,90%会失败
不是把命令填进去就完事。常见失败原因全是权限和上下文缺失。
- 必须勾选「不管用户是否登录都要运行」——否则用户登出后任务直接挂起
- 必须勾选「使用最高权限运行」——否则读不到加密保存的连接密码,报
Permission denied - 「配置为」选 Windows 10/11 或 Server 2016+,别用老版本兼容模式
- 起始目录要设为 Navicat 安装路径(如
C:\Program Files\PremiumSoft\Navicat Premium 15\),否则找不到依赖 DLL - 建议追加日志:
navicat.exe --sync "D:\Navicat\Tasks\dict_sync.ncx" >> D:\Navicat\Logs\dict_sync.log 2>&1
NOT NULL 而目标表没设,Navicat 在「仅主键匹配」模式下也会跳过整条记录,且不报错。务必导出两张表的 SHOW CREATE TABLE 对比后再启动定时任务。











