Navicat 17 不支持原生增量备份,其“备份数据库”功能仅为全量导出,无增量逻辑;所谓增量需通过脚本调用数据库原生命令加时间条件实现,或使用“数据传输”任务配合查询条件模拟。

Navicat 17 本身不支持「仅增量备份」的原生定时任务——它没有内置的增量备份逻辑,所有备份操作默认是全量快照。所谓“增量”,必须靠外部条件控制,不是勾个选项就能生效。
为什么 备份数据库 向导里找不到「增量」开关
Navicat 17 的「备份数据库」功能只生成完整 SQL 转储或二进制快照(如 MySQL 的 mysqldump 输出),不记录上一次备份位置、不比对 binlog、也不解析表变更状态。它压根不区分“哪些行变了”,所以界面里根本不会出现「增量」复选框。
你看到的「增量同步」相关描述,实际来自 Navicat 的 数据传输 或 数据同步 功能模块,和「备份数据库」是两套机制,不能混用。
-
备份数据库→ 产出 .sql 或 .ncb 文件,用于恢复,无增量能力 -
数据同步→ 可配置 WHERE 条件(如last_updated > ?),实现逻辑增量,但结果不是备份文件,而是写入目标库
想让定时任务「效果上接近增量备份」,只能靠脚本+条件过滤
真正可行的做法,是在导出的批处理或 Shell 脚本中,用数据库原生命令替代 Navicat 默认的全量 dump,并加入时间条件。例如 MySQL 场景:
不推荐直接用 Navicat 导出的 navicat_backup.bat(它调用的是无参数的 mysqldump --all-databases);而应手动改写为:
mysqldump -u root -p'xxx' mydb users --where="updated_at > '2026-09-06 00:00:00'" > users_increment_20260907.sql
- 必须确保表里有可靠的时间戳字段(如
updated_at或modified_time),且已建立索引 - 脚本中时间值需动态生成(Windows 用
%date%+for /f处理,macOS/Linux 用$(date -d 'yesterday' +\%Y-\%m-\%d)) - Navicat 导出的脚本只是起点,不能直接拿来当增量方案用
用 任务 模块做「伪增量同步」并定时触发的实操要点
如果你接受「把增量数据同步到另一个库作为备份副本」这种替代路径,任务 → 数据传输 是唯一能配置条件筛选的地方:
- 新建任务时类型必须选
数据传输,不是「备份数据库」 - 源对象选择具体表,目标选同结构的空表或历史归档库
- 在「高级」页勾选
使用查询条件,填入类似updated_at > (SELECT MAX(updated_at) FROM backup_log)的子查询(需提前建日志表记录上次同步点) - 调度设置里启用「自动运行」,但注意:该调度依赖 Navicat 进程常驻,关掉软件任务就停摆;生产环境务必配合系统级定时器(Windows 任务计划程序 / cron)启动 Navicat 并加载该任务
这个方案导出的不是备份文件,而是实时写入另一库,所以无法做离线校验,也不符合传统备份定义——但它确实能减少每次传输的数据量。
最容易被忽略的坑:时间字段不可靠 + 调度环境无交互上下文
很多用户按教程加了 WHERE updated_at > ? 却发现漏数据,原因通常是:
- 应用层未统一更新
updated_at,有些 INSERT 不带该字段,默认为0000-00-00,被 WHERE 过滤掉 - 数据库时区与脚本运行环境时区不一致,导致「昨天」算错一天
- Windows 下用任务计划程序执行批处理时,Navicat 以服务账户运行,无法读取用户密钥链里的数据库密码,连接直接失败
真要落地,得先验证单次脚本能跑通,再嵌入调度;别指望图形界面点几下就自动解决增量问题。











