Navicat 不支持跨库自动清理,需用 Windows 自带 forfiles 命令配合任务计划程序定时执行脚本,按路径逐个清理 .nb3 文件,并须配置最高权限、避免中文路径、同步更新路径及添加日志验证。
Navicat 本身不支持跨库自动清理,必须靠外部脚本驱动
navicat 的「计划任务」只管备份,不管删——它连单个数据库的自动清理都只是伪功能(比如某些老版本里“默认3天自动删除”实际是界面误导,底层没触发任何删除逻辑)。真正要清理多台数据库的旧 .nb3 文件,得自己写脚本,再用 windows 任务计划程序调度执行。
原因很简单:Navicat 备份生成的文件路径是按连接名、服务器地址、数据库名层层嵌套的,比如:
G:\Navicat\MySQL\Servers\prod-10.20.30.40\cmsG:\Navicat\MySQL\Servers\test-10.20.30.41\user_center-
D:\bak\mysql\fs\fs(你自定义的路径)
这些路径彼此独立,Navicat 没提供统一入口去扫描、判断、批量删除。所以别在 Navicat 界面里找“清理设置”,那是白费时间。
用 forfiles 脚本一次性清理多个路径下的 .nb3 文件
forfiles 是 Windows 自带命令,轻量、稳定、无需安装额外工具,特别适合这种定时清理场景。关键是要为每个数据库备份路径单独写一行 forfiles 命令,避免路径含中文或特殊字符导致报错。
以下是一个真实可用的 del_old_backups.bat 示例(保存为 ANSI 或 UTF-8 without BOM 编码):
rem 清理生产环境 cms 数据库备份(7天前) forfiles /p "G:\Navicat\MySQL\Servers\prod-10.20.30.40\cms" /m "*.nb3" /d -7 /c "cmd /c del @path" rem 清理测试环境 user_center 数据库备份(5天前) forfiles /p "G:\Navicat\MySQL\Servers\test-10.20.30.41\user_center" /m "*.nb3" /d -5 /c "cmd /c del @path" rem 清理自定义路径 fs 数据库备份(3天前) forfiles /p "D:\bak\mysql\fs\fs" /m "*.nb3" /d -3 /c "cmd /c del @path"
注意要点:
-
/p后的路径必须是全英文、无空格、无中文——哪怕路径里有个「测试」或「备份」汉字,forfiles就会直接报错:'forfiles' 不是内部或外部命令或错误: 目录名称无效 -
/d -7表示「早于当前日期 7 天」,不是「超过 7 天」,这点和直觉相反,但它是 Windows 原生命令的固定语法 - 每行末尾不要加
exit,否则后面几行根本不会执行;也不要用CHOICE等交互命令,任务计划里无人值守,会卡死
Windows 任务计划中必须勾选「使用最高权限运行」
Navicat 备份文件默认存放在用户文档目录(如 C:\Users\YourName\Documents\Navicat\...),而 Windows 任务计划默认以低权限运行,对这些路径可能只有读取权,删不了文件——现象就是任务“运行成功”,但日志里没报错,文件却一个没少。
正确配置方式:
- 新建基本任务 → 设置触发器(比如每天凌晨 2:00)→ 动作选「启动程序」→ 浏览到你的
.bat文件 - 建完后,在「任务计划程序库」里右键该任务 → 「属性」→ 勾选 「不管用户是否登录都要运行」 和 「使用最高权限运行」
- 点击「更改用户或组」→ 输入
SYSTEM或当前管理员账户名 → 确认 - 务必点「确定」时输入管理员密码(不是当前用户密码,是提权所需的凭证)
漏掉任一环节,脚本大概率静默失败。
备份路径变更后,脚本必须同步更新,且建议加日志验证
Navicat 升级、重装、改连接名、换服务器 IP,都会导致备份路径变化。比如原来 Servers\prod-10.20.30.40 变成 Servers\prod-10.20.30.42,脚本还按老路径扫,就永远找不到文件,也永远不会报错——你以为它在干活,其实它在摸鱼。
推荐加一行简单日志,便于排查:
echo [%date% %time%] 开始清理 >> D:\logs\cleanup.log forfiles /p "G:\Navicat\MySQL\Servers\prod-10.20.30.40\cms" /m "*.nb3" /d -7 /c "cmd /c echo @file >> D:\logs\cleanup.log & del @path" echo [%date% %time%] 清理完成 >> D:\logs\cleanup.log
这样每天运行后,打开 D:\logs\cleanup.log 就能一眼看出:有没有匹配到文件?删了哪些?路径对不对?
最麻烦的不是写错脚本,而是路径变了你不知道,还傻等“自动清理”起作用。










