Navicat 17 不支持建表时自动触发备份,因其计划任务仅响应连接级或数据库级定时触发,无法监听DDL事件;可行替代方案是结合CLI与外部脚本动态生成备份配置。
navicat 17 不支持在“建表阶段”直接配置自动备份任务——计划任务无法绑定到某张表的创建动作上,它只响应连接级或数据库级的定时触发。
为什么不能在建表时自动触发备份
Navicat 的计划任务本质是预设的、周期性执行的作业,底层调用的是 backup database 或 CLI 工具命令,作用对象只能是整个数据库(或指定库下的多个表),而非 DDL 事件(如 CREATE TABLE)。它没有监听 SQL 执行流的能力,也不提供触发器式钩子。
- 建表是瞬时操作,而备份是耗时 I/O 行为,二者语义和生命周期不匹配
- Navicat 没有暴露类似 MySQL
binlog或 PostgreSQLpg_logical的变更捕获接口 - 所谓“关联表导出”,实际是指备份时勾选特定表,不是动态感知新表并追加
真正可行的替代方案:用计划任务 + 表名通配逻辑
如果你希望每次备份都包含最新建的表(比如每天凌晨备份时自动包含当天新增的表),关键在于:备份任务本身不改,但导出路径/文件名或 SQL 脚本里用变量或动态拼接覆盖范围。
- 在 Navicat 计划任务中,“备份数据库”类型 → “对象”选项卡 → 勾选“所有表”,或手动维护一张“需备份表清单”(适合表结构稳定场景)
- 若必须按表粒度控制,改用 CLI 方式:
navicat.exe --backup "MyConn" "mydb" "D:\bk\full_%Y%m%d.sql",再配合外部脚本扫描information_schema.tables生成临时白名单 SQL 文件供备份引用 - 注意:Navicat CLI 不支持运行时传入动态表列表,所以“自动包含新表”必须靠前置脚本生成固定备份配置,再由计划任务调用
容易被忽略的兼容性坑:Navicat 17 的 CLI 备份限制
Navicat Premium 17 的 navicat.exe CLI 工具虽支持 --backup,但存在几个硬性约束,直接影响你能否实现“表级动态备份”:
- 不支持
--include-tables或--exclude-tables参数(对比mysqldump的--tables) - 备份目标只能是整个数据库,或预存在 Navicat 中的“备份配置文件”(.ncb 文件),而 .ncb 文件本身不能程序化生成
- Windows 下调用 CLI 时,
%date%等系统变量在任务计划程序中可能解析失败,建议改用%Y%m%d这类 Navicat 内置时间变量 - CLI 备份日志不输出详细表级信息,失败时仅报
Backup failed: Unknown error,需打开 Navicat 日志查看navicat.log定位
真要实现“建表即备份”,得跳出 Navicat——在数据库侧用触发器记录建表事件,再由外部调度器轮询该日志表,触发 mysqldump --tables 或 pg_dump -t。Navicat 17 只适合做定期全量或半静态备份,别把它当数据库审计或 CDC 工具用。











