navicat本身不支持跨库定时同步,必须依赖windows下navigator.exe调用已保存的.ns x文件,并配合任务计划程序实现;macos/linux无法直接运行.ns x同步任务,需改用mysqldump+mysql等原生工具链。
navicat 本身不支持跨库定时同步,所谓“定时”必须靠外部调度工具驱动命令行执行已保存的同步任务(.nsx 文件),且仅 windows 版本有稳定路径。
Windows 下用 navigator.exe + 任务计划程序跑 .nsx 同步任务
这是目前唯一被验证稳定的跨库(如 MySQL→MySQL、MySQL→PostgreSQL)定时同步方式,前提是你的 Navicat 是 Premium 或 for MySQL 15+ 版本,且安装目录下存在 navigator.exe。
- 先在 GUI 中完整配置一次同步:选好源库、目标库、映射规则,点 Save As 保存为
my_sync.nsx(记住全路径,比如D:\Navicat\Tasks\my_sync.nsx) - 测试命令行是否能跑通:
"C:\Program Files\PremiumSoft\Navicat Premium 16\navigator.exe" -sync "D:\Navicat\Tasks\my_sync.nsx"(路径含空格必须加英文双引号) - 若报错
Failed to load connection,大概率是 .nsx 里勾选了 Save password;必须改回连接属性中填明文密码(仅限内网可信环境) - 把命令写成
.bat脚本,再用 Windows 任务计划程序添加任务,并务必勾选:不管用户是否登录都要运行 和 使用最高权限运行,否则常见Permission denied
macOS/Linux 用户无法直接运行 .nsx 同步任务
Navicat 16+ 的 macOS/Linux 版附带的是 navicat CLI 工具(不是 navigator),但它**根本不支持 -sync 或 -runjob 参数运行 .nsx 文件**。
-
navicat -backup和navicat -restore可用,但同步逻辑不在其中 - 官方没提供替代方案,强行用 CrossOver 或虚拟机跑 Windows 版属于高成本 workaround
- 更现实的选择是放弃 Navicat 同步逻辑,改用原生工具链:
mysqldump+mysql(MySQL→MySQL)、pg_dump+psql(PostgreSQL→PostgreSQL),或csvkit+psql -c "\copy"做中间格式搬运
同步模式选错会导致数据被静默覆盖
Navicat 默认启用「结构 + 数据」比对,但跨库场景下这个模式极危险——它会把目标库中你手动加的字段、索引、备注全删掉,只保留和源库完全一致的结构。
- 如果你只是想同步某几张表的数据(比如每天把生产库的订单表同步到测试库),请改用 仅主键匹配 模式:只检查主键是否存在,存在则跳过,不存在则插入
- 避免用「逐行比较」:要求源/目标表都有主键或唯一索引,且 10 万行以上就明显卡顿;跨库时字段类型微小差异(如 MySQL
TINYINT(1)vs PostgreSQLBOOLEAN)会导致哈希值不等,误判为全量更新 - 「时间戳字段」模式需两张表都存在同名
updated_at字段并严格维护,老系统基本不可行
字符集、SQL 模式、时区不一致会静默失败
任务显示「成功」,但目标库中文变问号、空值被转成默认值、INSERT IGNORE 变成普通 INSERT 导致主键冲突中断——这些都不是同步设置的问题,而是连接层配置漏了。
- 两个连接的「高级」设置中,
Character set必须显式设为相同值(如都设utf8mb4),不能一个留空一个填 - MySQL 连接里要确认
SQL Mode是否启用了NO_ZERO_DATE,否则同步生成的DEFAULT '0000-00-00'会被拒绝 - 时区不一致时,
DATETIME字段可能偏移 8 小时;建议源/目标连接都显式设置Time zone为+00:00或统一为SYSTEM
真正容易被忽略的是:Navicat 的同步日志默认不记录字段级截断、NULL 转空字符串、JSON 解析失败这类问题。一旦跨库迁移后行数对不上,必须打开 Log all operations to file 并手动查日志文件,而不是只信界面上那个绿色的「completed」提示。











