单向数据同步需手动指定源和目标,仅勾选insert和update records并确保键映射正确,预览确认后再执行。navicat严格按配置执行,不自动判断上下游,选错将导致数据倒灌或误删。
单向数据同步在 navicat 里不是“开箱即用”的一键操作,而是靠你明确指定源(source)和目标(target),再控制“做什么动作”来实现的。只要不勾选 delete records,且确保键映射正确,就能安全地只增不删、只更不覆。
怎么选对 Source 和 Target?
这是单向同步的第一道门槛。Navicat 不会自动判断哪边是“上游”,它完全按你配置的顺序执行:所有操作都以 Source 为准,写入或覆盖 Target。比如你要把测试库的数据推到生产库,就必须把测试库设为 Source,生产库设为 Target。
- 如果选反了,
Insert records会把生产库数据往测试库插,Update records会用生产库旧值覆盖测试库新值——结果就是“倒灌”,非常危险 - 界面上有“交换 Source/Target”按钮,发现选错后不用关窗口重来,点一下就能调换
- 连接名最好带环境标识,比如
test_mysql_8080、prod_mysql_3306,避免下拉菜单里看花眼
关键选项:为什么必须关掉 Delete records?
Delete records 是单向合并场景里最常误开的开关。它代表“目标库有、源库没有的记录就删掉”。生产环境一旦开了这个,就等于授权 Navicat 删除线上数据——哪怕只是漏同步了几条测试数据,也可能触发级联删除或破坏业务完整性。
- 标准单向合并(如测试→生产)只应勾选
Insert records和Update records - 如果你只想补新数据、不更新已有记录,就只勾
Insert records;想连修改也同步,再加Update records -
Delete records留空,不代表同步失败,而是跳过该动作——Navicat 生成的 SQL 脚本里根本不会出现DELETE语句
键映射没配对,同步就变成“乱炖”
Navicat 比对两表数据时,全靠你在 Key Mapping 里指定的字段当“身份证”。如果这里配错了,比如用非唯一字段(如 name)当主键映射,就会出现:同一个人在两边改了不同手机号,却因 name 相同被当成同一行反复覆盖;或者两条不同记录因字段值偶然相同,被错误合并。
- 务必确认映射的字段是源表和目标表都有的主键(如
id)或联合唯一键(如order_no + item_id) - 不要依赖 Navicat 的自动映射,进到
Step 2: Field Mapping后手动核对一遍Key Mapping区域 - 如果表没有显式主键,但业务上有逻辑主键(比如订单号+时间戳),就手动添加到映射中,别让它空着
预览比执行更重要
点击 Compare & Preview 不是走流程,它是你最后的安全阀。这里能看到每张表将执行多少 INSERT、UPDATE、DELETE,还能双击某一行,左右对比源和目标的具体字段值差异。
- 如果预览显示某张表要
UPDATE几百行,但你只改了 3 条测试数据,说明键映射或筛选条件可能有问题 - 预览界面底部的“差异详情”里,高亮字段就是冲突点,可以单独取消勾选某几行,避免一次性全量覆盖
- 第一次跑新表同步,建议先用
Compare & Preview,确认无误再点Run Synchronization;后续复用可存为 profile,但每次加载后仍建议快速扫一眼预览结果
真正容易被忽略的不是按钮在哪,而是“谁以谁为准”这个前提——Navicat 从不替你做主,它只忠实地执行你画的线。键映射错一格,选项多勾一项,预览跳过去,都可能让单向同步变成单向灾难。











