Navicat 备份文件名不支持原生日期变量,需通过命令行工具 ncli 配合批处理或 Shell 脚本动态生成带日期的文件名,且必须使用绝对路径、确保执行权限及正确调用脚本而非 GUI。
navicat 本身没有内置的 %y%m%d 或 ${date} 这类动态变量语法。你在「计划任务」或「备份设置」里填入 backup_%y%m%d.sql,它会原样保存为字面量,不会解析成实际日期。
Navicat 提供命令行工具 ncli.exe(Windows 下默认路径如 "C:Program FilesPremiumSoftNavicat Premium 16ncli.exe"),它支持参数化调用,配合批处理可实现带日期的文件名生成。
my_backup_job),并确保它能手动执行成功run_backup.bat:set DATESTR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%"C:Program FilesPremiumSoftNavicat Premium 16ncli.exe" -console -batch "my_backup_job" -output "D:backupsbackup_%DATESTR%.sql"
%DATE% 在中文 Windows 下格式通常是 2024/05/20,所以用 ~ 截取保证稳定;若环境语言不同,建议改用 powershell -Command "(Get-Date).ToString('yyyyMMdd')" 替代-output 参数只对「导出结构/数据」类作业有效;如果是「备份到 Navicat 自有格式(.nsb)」,则该参数被忽略——必须用 SQL 导出模式Navicat for Mac/Linux 同样提供 ncli,但路径和参数略有差异,且需先启用命令行工具(安装时勾选或运行 /Applications/Navicat Premium.app/Contents/MacOS/ncli --install)。
run_backup.sh):#!/bin/bashDATESTR=$(date +%Y%m%d)/Applications/Navicat Premium.app/Contents/MacOS/ncli -console -batch "my_backup_job" -output "/Users/me/backups/backup_${DATESTR}.sql"
chmod +x run_backup.sh
ncli
无论是 Windows 任务计划程序,还是 macOS 的 launchd、Linux 的 cron,都必须指向你写的 .bat 或 .sh,而不是双击打开 Navicat 主程序。GUI 进程在无桌面会话下无法渲染,会导致备份静默失败。
cmd.exe,参数填 /c D:scriptsrun_backup.bat
0 2 * * * /Users/me/scripts/run_backup.sh > /Users/me/logs/backup.log 2>&1
ncli 是否在 PATH 中?脚本里路径是否全用绝对路径?Navicat 的备份命名逻辑是静态的,所有“自动加日期”的效果都得靠外部脚本驱动 ncli,而脚本里日期生成方式、路径写法、执行上下文权限,三者缺一不可。最容易漏的是 Windows 下 %DATE% 格式随系统区域变化,或者 macOS 上忘了给 ncli 授予全盘访问权限。