navicat默认备份文件名不带时间戳,会覆盖旧文件;需通过修改其生成的.bat或.sh脚本,注入wmic或date命令动态生成日期格式文件名,再由windows任务计划或crontab调用,方能实现多日保留。
navicat默认备份文件名不带时间戳,必须手动干预
navicat 生成的备份文件(如 mydb.sql 或 mydb.psc)默认**不包含日期或时间信息**。第二天执行相同任务时,会直接覆盖前一天的文件——等于只留最后一份,起不到“多日保留”作用。这不是 bug,是设计如此;它把命名逻辑完全交给了用户或外部脚本。
在Windows任务计划中用变量实现日期命名
Navicat 自身界面里无法设置 %date% 或 %time% 这类变量,但它的“计划任务”底层调用的是 Windows Task Scheduler,而后者支持在“程序/脚本”参数中使用环境变量。关键在于:你得绕过 Navicat 的图形化备份,改用它导出的命令行脚本 + 手动注入时间变量。
- 右键数据库 → “备份数据库” → 勾选“保存为批处理文件”,取消“立即执行”
- 打开生成的
.bat文件,找到类似这行:mysqldump --host=localhost --user=root --password=123456 mydb > "D:\backups\mydb.sql" - 把它改成带日期的路径:
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"<br>set "YY=%dt:~2,2%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"<br>mysqldump --host=localhost --user=root --password=123456 mydb > "D:\backups\mydb_%YY%%MM%%DD%.sql" - 保存后,在 Windows 任务计划中新建任务,触发器设好时间,操作→“启动程序”指向这个修改后的
.bat文件
macOS/Linux 下用 date 命令加时间戳
Navicat macOS/Linux 版本导出的是 shell 脚本(.sh),里面也默认写死文件名。你需要编辑该脚本,把硬编码路径替换成动态生成的:
- 找到原命令行中的输出路径部分,例如:
pg_dump -h localhost -U postgres mydb > /Users/me/backups/mydb.sql - 替换为:
DATE=$(date +"%Y%m%d_%H%M")<br>pg_dump -h localhost -U postgres mydb > "/Users/me/backups/mydb_${DATE}.sql" - 确保脚本有执行权限:
chmod +x backup.sh - 用
crontab -e添加定时任务,例如每天凌晨2点:0 2 * * * /path/to/backup.sh
为什么不能依赖 Navicat 界面里的“自动运行”命名逻辑
Navicat 的“自动运行” → “新建批处理作业” → “设置任务计划”这一整套流程,**根本不解析或替换任何时间变量**。它只负责把预设动作注册进 Windows 任务计划,而备份动作本身仍按原始配置执行——包括原始文件名。所有“自动加日期”的教程截图,基本都是伪造或误读了实际行为。真正生效的只有你亲手改写的脚本或外部调度器的参数扩展能力。
最易被忽略的一点:即使你用了 %date%,Windows 默认格式含斜杠(2026/07/28),直接拼进文件名会导致路径错误;必须用 wmic 或 PowerShell 提取纯数字格式,否则任务静默失败且无提示。











