如何使用Navicat定时备份并保留多个版本

作者:袖梨 2026-08-10

Navicat 本身不支持自动轮转保留N个版本,仅能生成带时间戳的备份文件,清理旧文件必须依赖外部脚本(如PowerShell、find或bat/sh)配合系统定时任务实现。

Navicat 本身不支持「自动轮转保留 N 个版本」——它每次备份默认覆盖同名文件,或靠手动加时间戳命名,但不会自动清理旧备份。真要实现“定时 + 多版本保留”,必须组合外部工具和脚本逻辑,不能只点界面。


Navicat 自带计划任务能设定时,但不能自动删旧备份

Navicat Premium(Windows)的「计划任务」或「自动运行」可配置每天/每周执行一次 Backup database,也支持在文件名里用 %Y%m%d%H%i%s 插入时间戳,生成类似 mydb_20260727020000.sql 的文件。

但它不做以下任何事:

  1. 不检查目标目录下已有多少个备份文件
  2. 不自动删除超过 7 天、或超过 10 个的旧文件
  3. 不判断 mysqldump 是否真的成功(比如磁盘满、权限错、连接超时),失败了也不会发通知

所以仅靠 Navicat 界面设置,你只能得到一堆时间戳文件,但得自己定期进文件夹手动删——这不是“保留多个版本”,是“堆积所有版本”。


真正可行:用 Navicat 导出脚本 + 外部 shell/bat 控制保留策略

核心思路是:让 Navicat 只干一件事——生成带完整参数的 mysqldump 命令脚本;剩下的定时、命名、清理,全交给系统级工具。

操作步骤:

  1. 右键数据库 →「备份数据库」→ 下一步时取消勾选“立即执行”,勾选「保存为批处理文件」(Windows)或「保存为 Shell 脚本」(macOS/Linux)
  2. 打开生成的 .bat.sh,把明文 --password=xxx 替掉,改用 --login-path=local(MySQL)或 --no-password 配合 .pgpass(PostgreSQL)
  3. 在脚本末尾追加清理逻辑(示例为 Linux .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
  4. 把该脚本加入 cron(Linux/macOS)或「任务计划程序」(Windows),注意 Windows 中必须填对「起始于」路径,否则 findmysqldump 找不到命令

关键点:tail -n +15 表示跳过最新 14 个,删掉其余;2>/dev/null 防止首次无文件时报错中断。


Windows 下用任务计划跑脚本,最容易卡在环境变量和路径

常见现象:.bat 双击能跑,放进任务计划就失败,报错 'mysqldump' is not recognizedcannot create backup.sql: Access is denied

原因和对策:

  1. mysqldump 不在系统 PATH 里?→ 在脚本开头显式写全路径,例如 "C:Program FilesMySQLMySQL Server 8.0binmysqldump.exe"
  2. 输出路径是相对路径?→ 必须用绝对路径,且确保运行账户对该路径有写权限(推荐 D:backups,别用 C:UsersxxxDocuments
  3. 任务没设「起始于」?→ 在任务计划「操作」页,「起始于」字段必须填脚本所在目录,例如 D:backups,否则 cd 切不到正确位置
  4. 账户没密码或选了「只在用户登录时运行」?→ 勾选「不管用户是否登录都要运行」+「不存储密码」,然后手动输入一次密码完成注册(后续后台静默执行)

不处理这些,定时任务大概率静默失败,你以为备份在跑,其实什么都没留下。


Navicat 的 .psc 备份文件不是最终归档格式

很多人误以为 Navicat 生成的 .psc 文件就是备份,其实它是 Navicat 自有压缩格式,本质是加密封装的 SQL + 元数据,不能直接被 mysql 命令还原,也不能被其他工具读取。

如果你要长期存档、跨平台恢复、或做自动化校验,必须:

  1. 在 Navicat 备份设置中勾选「导出为 SQL 文件」,而不是默认的「Navicat 备份文件(.psc)」
  2. 或者备份后手动右键 .psc →「提取 SQL」→ 保存为 .sql(这步无法自动化)

所以,所有涉及多版本保留、异地同步、CI/CD 恢复的场景,.psc 都不该是你的主备份格式。绕不开的还是原生 .sql + 外部轮转逻辑。

最易被忽略的一点:时间戳命名必须用 %Y%m%d%H%i%s(注意是 %i 表示分钟,不是 %M),否则 Windows 批处理里 %M 会被当成变量解析为空,导致文件名异常。这个细节一错,整个轮转逻辑就失效。

相关文章

精彩推荐