Navicat 数据同步不支持断点续传,因其为无状态一次性任务,不记录同步中断位置;仅能通过历史日志、MySQL通用查询日志回溯,或人工标记、表级控制、条件过滤等方式实现近似断点续传。
Navicat 本身不记录同步中断的断点位置
navicat 的数据同步(data synchronization)是无状态的一次性任务,它不会自动保存“同步到哪一行”“卡在第几张表”这类断点信息。所谓“断点续传”,实际得靠人工干预或外部辅助手段实现——不是功能缺失,而是设计如此:同步本质是比对 + 生成 sql + 执行,中间不落盘状态。
查同步操作痕迹只能看历史日志和通用查询日志
你真正能回溯的,只有两类日志:
-
Navicat 自带历史日志:按
Ctrl+H(Windows)或Command+H(macOS)打开,只记录你在 Navicat 内执行过的 SQL 语句、时间、数据库对象,不含同步向导里的勾选逻辑或预览结果; -
MySQL 通用查询日志(
general_log):开启后会记录所有客户端发来的语句(含 Navicat 同步时生成的INSERT/UPDATE/DELETE),但不带上下文(比如不知道这句是第几次同步、属于哪张表映射)。要启用它,需在查询窗口运行:SET GLOBAL general_log = 1;
再查路径:SHOW VARIABLES LIKE 'general_log_file';
注意:general_log 默认关闭,开启后有明显性能损耗,用完务必关掉:SET GLOBAL general_log = 0;
真正做断点续传,得靠人工标记 + 表级控制
如果你中途点了停止,下次不能“接着上次那条记录继续”,但可以缩小范围重跑:
- 进同步向导 → Step 2 映射页,取消勾选已成功同步的表,只留未完成的;
- 若某张表同步到一半失败,且主键/唯一键可用,可在目标库先手动查最大 ID 或最新时间戳,然后在源库加
WHERE条件过滤(需改用「高级模式」或导出 SQL 后编辑); - 更稳妥的做法:同步前在源库建临时标记字段(如
sync_flag TINYINT DEFAULT 0),每同步完一批就UPDATE sync_flag = 1,下次只查WHERE sync_flag = 0; - 别依赖 Navicat 的「保存 Profile」——它只存配置(连接、映射、选项),不存执行进度。
Oracle 转 MySQL 场景下,有类断点逻辑可参考
虽然不是 Navicat 原生支持,但部分用户在 Oracle→MySQL 迁移中会用类似断点思路:先查目标库已有表:
SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'target_db' AND TABLE_TYPE = 'BASE TABLE';再在 Oracle 端排除这些表名:
SELECT table_name FROM all_tables WHERE owner = 'SRC_USER' AND table_name NOT IN ('t1','t2');这样下次只同步遗漏的表——本质是「表级跳过」,不是行级续传。
真正的行级断点续传,Navicat 不提供,也不建议强求;复杂场景该上脚本或 ETL 工具来兜底。










