Navicat 16「数据同步」需手动配置源/目标、比对逻辑与字段映射,否则易覆盖或漏写;必须用“工具→数据同步”而非“数据传输”,WHERE条件须填在表映射页Options中,字段匹配须人工核对并设Ignore列。
navicat 16 的「数据同步」功能不是一键启动的全自动工具,它必须手动指定源与目标、配置比对逻辑、校验字段映射,否则极易覆盖或漏写数据。直接点“同步”按钮前,至少要确认三件事:连接通、权限够、表结构对得上。
选错功能入口:用“数据同步”而非“数据传输”
跨库(比如测试库→生产库)同步数据,必须走 工具 → 数据同步,不是 工具 → 数据传输。“数据传输”适合一次性全量导出导入,没有比对能力;而“数据同步”才支持主键匹配、增量条件、冲突更新等核心逻辑。误用 数据传输 做同步,等于把目标库当空库重装——删表重建、丢索引、清备注,静默发生。
WHERE 条件必须填在表映射页,不是高级选项里
想只同步今天新增的订单?不能在「高级」页里找“增量同步”开关——根本没有。正确路径是:表映射 页签 → 点某张表右侧的 Options → 勾选 Use WHERE condition → 输入 created_at > '2026-07-27 00:00:00'。这里填的 SQL 才真正控制拉取范围。填错位置(比如塞进「高级 → 设置同步条件」),只会让比对变慢,数据照常全量搬运。
字段匹配不牢靠,必须人工核对每一对
Navicat 默认按列名自动连线(Match fields by name),但一旦源表有 status、目标表叫 state,它就可能把 status 错连到 updated_at 上,导致时间字段被业务状态覆盖。常见症状:目标表的 updated_at 全变成 0 或乱码时间。应对方式:
- 取消勾选
Match fields by name,手动拖拽确认每一组映射 - 把目标表中你不希望被覆盖的字段(如
updated_at、sync_version)加进Ignore columns列表 - 若源是 UUID、目标是自增 ID,必须手动指定业务唯一键(如
order_no)作匹配依据,否则 Navicat 无法识别同一行
千万级表同步卡死?不是 JVM 问题,是批次和连接状态没控住
看到内存飙升、软件无响应,别去改不存在的 navicat.vmoptions 文件——Navicat 16 是 C++ 程序,不跑在 JVM 上。-Xmx 参数对它完全无效。真正有效的动作只有三个:
- 在
高级 → 每批记录数中设为5000~10000;设太高(如 50000)会触发内存峰值,设太低(如 1000)会让事务碎片化、总耗时翻倍 - 右键目标连接 →
编辑连接 → 高级→ 勾选压缩协议(MySQL/PostgreSQL 支持),减少网络载荷 - 同步中途报
Commands out of sync,立刻右键该连接 →断开连接→ 再连接,不要重启软件;若仍失败,用复制连接 → 删除原连接 → 重命名新连接清缓存
大表同步的本质是稳,不是快。Navicat 没有流式处理能力,看到进程内存持续超过 1.2 GB,说明批次太大或字段含 BLOB/TEXT,此时宁可分两次跑,也不要硬扛。


















