Navicat不支持真正的数据库级批量备份,其“批处理作业”仅为多个单库Backup动作的顺序执行,每个任务硬编码连接与数据库名,需为每库单独创建;任务分组仅是视觉归类,不共享参数、不自动重试、不解决权限或路径差异,生产环境多库备份应改用脚本+系统定时器。
Navicat 本身没有“数据库级批量备份”功能,任务分组只是视觉归类
很多人点开「计划」→「新建批处理作业」后以为能一次选中多个数据库并统一配置备份参数,其实不是。navicat 的「批处理作业」本质是把多个独立的 backup xxx 动作按顺序串起来执行,每个动作仍绑定唯一连接和唯一数据库。所谓“任务分组”,仅指你在左侧导航树里手动拖拽多个计划任务到同一个文件夹(比如叫「prod-backups」),它不改变执行逻辑,也不共享参数。
真正影响批量效率的是:你得为每台服务器、每个库单独建一个 Backup 任务——哪怕它们用同一套账号密码、同一备份路径。没有“模板复用”或“变量替换”机制。
必须为每个数据库单独建 Backup 任务,不能跨连接复用
这是最常踩的坑。你无法在一个任务里填 -h192.168.1.10 -h192.168.1.11,也不能在「可用的工作」列表里找到“所有 prod 库”的聚合项。每个 Backup 条目都硬编码了连接名和数据库名,例如:
Backup hcpmanage (MySQL@192.168.1.10:3306)
Backup billing_db (MySQL@192.168.1.11:3306)
如果你有 8 个库分布在 3 台机器上,就得手动创建至少 8 个独立任务,再逐个拖进同一个分组文件夹。否则「开始」时只会跑第一个。
- 右键连接 →「备份」只能操作当前连接下的**单个已展开数据库**,不能多选
- 「转储 SQL 文件」支持多表,但不等于「备份」——它不包含事件、存储过程权限等元数据,也不是
.psc包 - 导出路径必须为绝对路径,且 Navicat 进程要有写权限;若用 UNC 路径(如
\nasackup),需确保 Windows 服务上下文能访问(映射盘符 Z: 在后台任务中通常不可见)
任务分组无法解决权限、路径、连接状态不一致问题
分组只是收纳盒,不解决底层执行条件差异。比如:
- 某个库用 MySQL 5.7,另一个用 8.0 —— 它们的
mysqldump参数默认行为不同(如--set-gtid-purged),但 Navicat 不暴露这些开关 - 一台服务器开了 SELinux 或 AppArmor,另一台没开,导致相同路径下有的任务成功、有的报
Permission denied - SSH 隧道连接的库,如果隧道在任务触发时已断开,Navicat 不重连,直接记录
Lost connection并停止后续任务
更麻烦的是:分组内任一任务失败,不会自动跳过继续执行下一个——整个批处理就停在那条失败日志上,你得手动点「重试」或删掉失败项再重跑。
真要批量管理多库备份,该放弃分组,改用脚本+系统定时器
Navicat 的任务分组适合临时整理、人工触发检查,不适合生产环境的多库备份调度。实际运维中,只要库数 ≥3,就应该切到命令行方案:
- 写一个
backup_all.sh,用mysqldump或pg_dump显式指定 host/user/db/path/压缩方式 - 每个库的参数可独立控制,比如对大库加
--single-transaction --skip-triggers,对小库加--routines - 用
date +%F-%H%M命名,避免同天覆盖;加md5sum校验并写入日志 - 丢进
cron或 Windows Task Scheduler,启动命令指向脚本,不依赖 Navicat GUI 是否运行
Navicat 的「批处理作业」只适合演示、开发机或单库多表场景。一旦涉及多主机、权限隔离、失败续跑、云上传等真实需求,它的抽象层级就太浅了——它连备份文件生成后是否真的非零字节都不校验。


















