Navicat 16 不支持原生“周备份+日备份”混合循环策略,需借助 Windows 任务计划程序或 PowerShell 脚本实现:拆分任务、添加时间戳变量、调度执行并清理旧备份。
Navicat 16 的自动备份任务不支持原生“周备份+日备份”混合循环策略
navicat 16 内置的「计划任务」只提供单一周期选项:每天、每周、每月 或 一次性,无法在一个任务中同时配置“工作日每日全备 + 周日做一次完整归档”这类复合逻辑。所谓“循环策略”必须靠外部调度或变通设计实现。
用 Windows 任务计划程序(Task Scheduler)触发不同 Navicat 备份任务
这是最稳定、可控性最强的落地方式:把周备份和日备份拆成两个独立的 Navicat 任务,再用系统级计划器分别调度。
- 在 Navicat 中创建两个备份连接任务:
backup_daily(设为“无计划”,仅保存)和backup_weekly(同样不启用内置计划) - 导出这两个任务为
.ntb文件(右键任务 →导出任务),例如存到C:\navicat\tasks\ - 打开 Windows 任务计划程序,新建两个基本任务:
- 每日任务:触发器设为“每天”,操作为启动程序,程序路径填
Navicat.exe,参数写--run-task "C:\navicat\tasks\backup_daily.ntb" - 每周任务:触发器设为“每周”,具体选周日,参数同上但指向
backup_weekly.ntb
- 每日任务:触发器设为“每天”,操作为启动程序,程序路径填
- 注意:Navicat 必须安装在所有目标机器上,且
Navicat.exe路径需准确(常见位置如"C:\Program Files\PremiumSoft\Navicat Premium 16\Navicat.exe")
备份文件名必须含日期/星期才能避免覆盖
Navicat 内置备份不自动加时间戳,若不手动干预,每次执行都会覆盖同名文件,导致“循环”失效。
- 在备份任务的「高级」设置中,勾选
使用变量,文件名填类似:db_${date:yyyyMMdd}_${time:HHmmss}.sql - 若需区分周/日,可为周任务单独设名:
db_weekly_${date:yyyy-MM-dd}_full.sql,日任务用:db_daily_${date:yyyyMMdd}_inc.sql - 变量语法仅支持
${date:...}和${time:...},不支持${weekday};如真要嵌入星期几,得改用 PowerShell 脚本中拼接后调用 Navicat
用 PowerShell 脚本统一调度并控制保留天数
当需要自动清理旧备份(比如保留最近 7 天日备 + 最近 4 周周备),纯 Navicat 或 Windows 计划任务都做不到,必须加脚本层。
- 写一个
run_backup.ps1,用Get-Date判断今天是否为周日,决定执行哪个.ntb - 备份完成后,用
Get-ChildItem+Where-Object扫描目录,按LastWriteTime删除超期文件 - Windows 计划任务只需调用该脚本,无需多个任务条目,也避免了 Navicat 启动冲突(多实例并发可能报错
Error 2003: Can't connect to MySQL server) - PowerShell 脚本需以管理员权限运行,并在执行策略中允许本地脚本:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Navicat 16 的计划模块本质是简化版前端,真正可靠的定时+循环+清理,得靠操作系统调度能力补足。最容易被忽略的是变量命名冲突和并发执行时 Navicat 实例锁——同一时刻只能有一个 GUI 实例处理备份任务,脚本里记得加 Start-Sleep -Seconds 2 避免连发失败。











