navicat 不支持复杂周期触发,必须用操作系统调度器(如 windows task scheduler)配合命令行调用 navigator.exe 实现;其内置计划仅限简单固定时间,且非守护进程、不解析 cron 表达式。
navicat 本身不支持复杂周期性触发条件,所有“复杂”需求(比如“每月第一个工作日 9:30 执行”“避开午休时段每小时一次”)都必须绕过其 gui 计划界面,改用操作系统级调度器配合命令行调用实现。
Navicat 内置计划只支持简单周期,且行为因平台而异
Windows 上的 Navicat Premium 16 确实提供「设置任务计划」按钮和「触发器」选项卡,能设每日/每周/每月,但仅限固定时间点、无条件判断、无排除窗口。macOS/Linux 下该功能基本不可用——没有后台服务支撑,GUI 设置后不会真正生效。
常见错误现象包括:
- 设置了“每周一 8:00”,结果某天没执行(因为 Navicat 进程未运行)
- 备份文件名用了
%Y%m%d,但多日执行后发现全被覆盖(变量未渲染,或路径权限不足) - 勾选了“不管用户是否登录都要运行”,却仍失败(实际依赖 Windows Task Scheduler 的配置,而非 Navicat 自身)
关键原因:Navicat 是客户端工具,不是守护进程。它不常驻、不监听系统时钟、也不解析 cron 表达式。
Windows 下用 Task Scheduler 调用 navigator.exe 才可靠
这是目前唯一能稳定落地复杂逻辑的方式。你不是在 Navicat 里“设触发器”,而是让 Windows 告诉 navigator.exe:“到点了,去跑这个 .nsx 或 .ntb 文件”。
实操要点:
-
navigator.exe必须用绝对路径调用,例如:"C:\Program Files\PremiumSoft\Navicat Premium 16\navigator.exe" -
.nsx(同步)或.ntb(备份)文件需已保存,且连接属性中禁用Save password;密码得明文填入,否则命令行无法认证 - 命令格式为:
navigator.exe -sync "D:\jobs\my_job.nsx"(路径含空格必须加英文双引号) - 在任务计划程序的「操作」页,「起始于」字段必须填
navigator.exe所在目录,不是任务文件路径 - 调试时勾选「运行时请勿启动新实例」,查「历史记录」页退出码:
0成功,2多为连接拒绝,3多为 SQL 报错
需要“每月第一个工作日”这类逻辑?必须用 PowerShell 中转
Task Scheduler 本身不支持“第一个工作日”这种语义,它只认 cron-like 时间表达式或固定日期。真要实现,得写脚本判断今天是不是目标日期,再决定是否调用 navigator.exe。
示例思路(run_backup.ps1):
if ((Get-Date).DayOfWeek -in 'Monday','Tuesday','Wednesday','Thursday','Friday') {
$firstWeekday = (Get-Date -Day 1).AddMonths(1).AddDays(-1)
while ($firstWeekday.DayOfWeek -notin 'Monday','Tuesday','Wednesday','Thursday','Friday') {
$firstWeekday = $firstWeekday.AddDays(-1)
}
if ((Get-Date).Date -eq $firstWeekday.Date) {
& "C:\Program Files\PremiumSoft\Navicat Premium 16\navigator.exe" -backup "D:\jobs\monthly_first_workday.ntb"
}
}
然后在 Task Scheduler 中每天凌晨 1:00 触发这个脚本即可。注意:PowerShell 脚本需设置执行策略(Set-ExecutionPolicy RemoteSigned -Scope CurrentUser),且不能依赖交互式会话。
文件名带动态变量,但别信 GUI 里的“自动加时间戳”
Navicat 允许在备份设置里写 db_${date:yyyyMMdd}_${time:HHmmss}.sql,但这个变量只在 GUI 手动执行或通过 Navicat.exe --run-task 启动时生效;若用 navigator.exe 直接跑 .ntb,变量不会被替换——你会得到字面名为 db_${date:yyyyMMdd}_... 的文件。
所以:
- 用
Navicat.exe --run-task方式时,变量可用 - 用
navigator.exe方式时,变量无效,必须靠 PowerShell 或批处理拼接真实文件名再传参 - 所有备份路径务必用绝对路径,且 Navicat 进程要有写入权限(尤其系统服务上下文运行时)
最易被忽略的一点:Navicat 的「计划任务」界面看起来很完整,但它本质上只是个参数生成器——生成的配置最终仍要靠外部调度器载入并执行。不理解这点,就会反复掉进“设了但没跑”“跑了但覆盖”“跑了但连不上”的坑里。











