Navicat 本身不支持自动轮转保留N个版本,仅能生成带时间戳的备份文件,清理旧文件必须依赖外部脚本(如PowerShell、find或bat/sh)配合系统定时任务实现。
Navicat 本身不支持「自动轮转保留 N 个版本」——它每次备份默认覆盖同名文件,或靠手动加时间戳命名,但不会自动清理旧备份。真要实现“定时 + 多版本保留”,必须组合外部工具和脚本逻辑,不能只点界面。
Navicat Premium(Windows)的「计划任务」或「自动运行」可配置每天/每周执行一次 Backup database,也支持在文件名里用 %Y%m%d%H%i%s 插入时间戳,生成类似 mydb_20260727020000.sql 的文件。
但它不做以下任何事:
mysqldump 是否真的成功(比如磁盘满、权限错、连接超时),失败了也不会发通知所以仅靠 Navicat 界面设置,你只能得到一堆时间戳文件,但得自己定期进文件夹手动删——这不是“保留多个版本”,是“堆积所有版本”。
核心思路是:让 Navicat 只干一件事——生成带完整参数的 mysqldump 命令脚本;剩下的定时、命名、清理,全交给系统级工具。
操作步骤:
.bat 或 .sh,把明文 --password=xxx 替掉,改用 --login-path=local(MySQL)或 --no-password 配合 .pgpass(PostgreSQL).sh):find /path/to/backups -name "mydb_*.sql" -mtime +7 -delete或更稳妥地保留最多 14 个:
ls -t /path/to/backups/mydb_*.sql 2>/dev/null | tail -n +15 | xargs -r rm
cron(Linux/macOS)或「任务计划程序」(Windows),注意 Windows 中必须填对「起始于」路径,否则 find 或 mysqldump 找不到命令关键点:tail -n +15 表示跳过最新 14 个,删掉其余;2>/dev/null 防止首次无文件时报错中断。
常见现象:.bat 双击能跑,放进任务计划就失败,报错 'mysqldump' is not recognized 或 cannot create backup.sql: Access is denied。
原因和对策:
mysqldump 不在系统 PATH 里?→ 在脚本开头显式写全路径,例如 "C:Program FilesMySQLMySQL Server 8.0binmysqldump.exe"
D:backups,别用 C:UsersxxxDocuments)D:backups,否则 cd 切不到正确位置不处理这些,定时任务大概率静默失败,你以为备份在跑,其实什么都没留下。
很多人误以为 Navicat 生成的 .psc 文件就是备份,其实它是 Navicat 自有压缩格式,本质是加密封装的 SQL + 元数据,不能直接被 mysql 命令还原,也不能被其他工具读取。
如果你要长期存档、跨平台恢复、或做自动化校验,必须:
.psc →「提取 SQL」→ 保存为 .sql(这步无法自动化)所以,所有涉及多版本保留、异地同步、CI/CD 恢复的场景,.psc 都不该是你的主备份格式。绕不开的还是原生 .sql + 外部轮转逻辑。
最易被忽略的一点:时间戳命名必须用 %Y%m%d%H%i%s(注意是 %i 表示分钟,不是 %M),否则 Windows 批处理里 %M 会被当成变量解析为空,导致文件名异常。这个细节一错,整个轮转逻辑就失效。