Navicat不支持自动断点续传,中断后默认重跑全量;唯一可行方式是同步前启用“自定义记录集”按主键分片生成独立数据集(如dataset_001),失败后手动从指定序号继续,同时需调大源库wait_timeout、关闭Navicat“自动断开空闲连接”,并确保目标表为InnoDB且启用事务。
Navicat 本身不支持自动断点续传
同步任务一旦中断,navicat 不会记住“已同步到第几行”,重跑默认从头开始。这不是 bug,而是设计如此——它没有内置的 checkpoint 机制,也不会写入任何进度标记。你看到的“继续”按钮,只是重新触发整个任务,而非恢复上次中断位置。
唯一可行的续传方式:提前启用「自定义记录集」分片
想真正跳过已成功部分,必须在同步前就规划好分片逻辑,而不是等中断后再补救:
- 右键表 → 选择「高级模式」→ 勾选「自定义记录集」(不能用默认的“全部记录”)
- 点击「记录集生成器」→ 按主键(如
id)范围切分,例如每 50000 行一组 → 生成dataset_001、dataset_002等独立数据集 - 每个数据集单独执行;若
dataset_007失败,下次手动勾选从dataset_007开始,前面 6 个不会重复执行 - 跨库迁移时,务必先查目标库已有表:
SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_db',再在源库过滤掉这些表,避免Table 'xxx' already exists
为什么“自动重连”≠“续传”
勾选「自动重连」只负责网络恢复,不恢复任务状态。连接重建后,Navicat 仍停在中断那一刻,需要你手动点击「继续」——但此时它并不知道哪些数据已写入,也不校验目标端一致性。
- 「保持连接间隔」设为 60 秒,是防断链的前提;否则哪怕网络稳定,MySQL 的
wait_timeout也会在空闲期主动踢掉连接 - 源库需同步调大
wait_timeout和interactive_timeout(建议 86400),并确认 Navicat 连接配置中取消勾选「自动断开空闲连接」 - 别依赖「遇到错误时继续」来保任务完成——它会破坏事务原子性,且对主键冲突类错误完全无效
中断后最常被忽略的检查项
重试前不验证这三点,大概率再次失败:
- 目标表引擎是否为
InnoDB(SHOW CREATE TABLE t1查看),MyISAM表无法回滚,看起来像“部分生效” - Navicat 连接高级设置里是否真开了
Use transaction,且没勾「遇到错误时继续」 - 同步导出 SQL 文件后,是否手动把
INSERT INTO改成INSERT IGNORE INTO或ON DUPLICATE KEY UPDATE——图形界面里根本没有这个开关


















