Navicat 数据同步工具无法导出增量修改的历史数据,因其不记录行级变更、不持久化预览结果;真正可行的路径是利用业务时间字段反查或开启 general_log 抓取 SQL,长期方案需自行建立快照或审计日志机制。

Navicat 数据同步工具本身无法导出“增量修改过的历史数据”——它不记录行级变更历史,也不保存同步过程中的中间结果。 你看到的“预览”只是运行时临时计算,关掉窗口就没了;所谓“历史”,只能靠外部机制补全。
为什么 Data Synchronization 的预览不是历史记录
Navicat 的 Data Synchronization 向导在点击 Compare&Preview 后显示的“将插入 X 行、更新 Y 行”,是内存中实时比对生成的瞬态结果。它:
- 不写入任何日志表、不生成归档文件、不持久化到磁盘
- 不包含每条变更的原始值(例如
name从Alice改为Bob) - 不记录执行时间、操作人、同步批次 ID 等审计字段
- 一旦关闭向导窗口或切换步骤,该预览内容彻底丢失
真正能拿到“哪些数据被增量改了”的两种可行路径
必须绕开 Navicat 自身限制,依赖数据库能力或前置设计:
-
用业务时间字段反查:如果你的表有
updated_at或modified_time,且增量逻辑基于该字段(如每次同步只取WHERE updated_at > '2026-10-20 00:00:00'),那直接在目标库执行SELECT * FROM t WHERE updated_at > '2026-10-20 00:00:00'就是你要的“增量修改数据” -
开启 MySQL general_log 临时抓 SQL:执行同步前运行
SET GLOBAL general_log = 1,同步完成后立刻关掉(SET GLOBAL general_log = 0)。然后查mysql.general_log表,过滤出INSERT/UPDATE语句——但注意:它只记语句文本,不记影响行数或原始值;且开启后明显拖慢性能,不可长期开着
想长期导出增量变更?得自己建快照机制
别等出问题再补救,提前留痕才是关键:
- 每次同步前,用 Navicat 执行
SELECT * FROM t WHERE updated_at > ?,导出为 CSV 文件并按时间戳命名(如customer_delta_20261020.csv) - 如果用
Data Synchronization向导,务必勾选Run after compare并手动复制底部Information Log标签页里的完整 SQL 到文本文件存档——这是唯一能还原“它到底干了什么”的现场证据 - 对重要表加触发器,把每次
UPDATE的主键、旧值、新值、时间写入一张audit_log表,后续可直接SELECT导出
最常被忽略的一点:Navicat 的同步预览和历史日志(Ctrl+H)根本不是一回事——前者不落地,后者只记你手动敲的语句。指望它回溯“哪几行变了”,等于拿记事本当数据库审计系统。


















