Navicat跨服务器同步无服务端调度能力,仅支持Windows下通过navigator.exe+任务计划程序运行.ns x文件实现自动化,需满足远程访问、SSH路径、字符集三前提,并严格配置同步模式与验证机制。

Navicat 本身不支持跨服务器自动化同步——它没有服务端调度能力,所谓“自动”只是在本地客户端前台运行时尝试连接源库和目标库;一旦网络不可达、SSH隧道未配好、或用户未登录Windows,任务就静默失败。
Windows 下用 navigator.exe + 任务计划程序跑 .nsx 同步任务
这是目前唯一被验证可行的路径,但仅限 Windows 版 Navicat Premium 15+(含 16/17),且必须满足底层连接前提。
- 先在 GUI 中完整配置一次同步:选好源库(如
192.168.10.5:3306)、目标库(如10.20.30.40:5432)、字段映射,最后务必点击「另存为作业」,保存为sync_orders.nsx(记下全路径,如D:\navicat_jobs\sync_orders.nsx) - 测试命令行是否通:
"C:\Program Files\PremiumSoft\Navicat Premium 16\navigator.exe" -sync "D:\navicat_jobs\sync_orders.nsx"——路径含空格必须加英文双引号 - 若报
Failed to load connection,大概率是 .nsx 里勾选了Save password;需回 GUI 编辑该连接,在「连接属性 → 高级」中取消勾选,并手动填明文密码(仅限内网可信环境) - 把命令写成
sync.bat,再在「任务计划程序」中新建任务,并严格勾选:不管用户是否登录都要运行使用最高权限运行运行时请勿显示界面
跨服务器同步必查的三个硬性前提
即使命令行能跑通,任务仍会在连接层卡死,日志里往往只显示 connection refused 或 timeout。
- MySQL/PostgreSQL 的远程访问权限必须放开:检查
bind-address = 0.0.0.0(非127.0.0.1),用户 host 必须是'sync_user'@'%'或具体 IP,不能只留'localhost' - 若走 SSH 隧道,Navicat 连接配置里的密钥路径必须用绝对路径(如
C:\Users\Admin\.ssh\id_rsa),不能用~或相对路径,否则navigator.exe启动时直接跳过隧道 - 两个库的字符集必须一致:在 Navicat 连接的「高级」设置中,
Character set都设为utf8mb4;一个设utf8一个留空,会导致中文变问号或同步中断
同步模式选错会静默覆盖数据
Navicat 默认启用「结构 + 数据」比对,跨服务器场景下极其危险——它会把目标库中你手动加的索引、备注、默认值全删掉,只保留和源库完全一致的结构。
- 如果只是每天追加订单表,选「仅主键匹配」:存在则跳过,不存在则插入;不会更新或删除已有记录
- 避免用「逐行比较」:要求两张表都有主键或唯一索引,且 10 万行以上明显卡顿;跨库时字段类型微小差异(如 MySQL
TINYINT(1)vs PostgreSQLBOOLEAN)会导致哈希误判,触发全量重写 - 「时间戳字段」模式需两张表都存在同名
updated_at字段并确保准确更新,否则漏同步;老系统慎用
真正容易被忽略的是:任务显示「成功」不代表数据已落地——它只表示 Navicat 客户端完成了连接与传输动作,中间任何网络抖动、字符集隐式转换、外键约束冲突,都可能让部分 INSERT 被静默丢弃,而日志里无提示。务必在同步后加一条验证查询(如 SELECT COUNT(*) FROM orders WHERE create_date >= CURDATE())并写入批处理作业尾部。


















