Navicat 17不支持多线程并行备份,无论是否升级Premium版本,其备份始终单进程串行执行;真正提速需绕开Navicat调度层,用shell/bat脚本并行调用mysqldump或配置独立系统级定时任务。

Navicat 的「批处理作业」不是并行,而是串行排队
你在「自动运行 → 新建批处理作业」里添加 5 个数据库备份任务,Navicat 实际执行顺序是:
- db1 开始 → 完成 → db2 开始 → 完成 → …
- 日志中显示的「开始时间」间隔,反映的是前一个任务写入完成、下一个才启动的延迟,不是并发
- 任意一个任务失败(如锁表、连接超时),后续任务照常排队,但不会跳过也不会并行补位
- 没有配置项、参数或隐藏开关能改变这个行为;界面里找不到“启用并行”选项
为什么 mysqldump 本身也不支持单库内多表并行?
mysqldump 是 Navicat 底层调用的实际工具,它自身是单线程程序:
-
--single-transaction只保障事务一致性,**不是并行导出** - 它按表顺序逐个
SELECT,无法把一张大表拆成多个 chunk 并发拉取 - 即使你手动加
&启动多个mysqldump进程,那也是多个独立进程竞争 I/O 和连接数,不是 Navicat 提供的“功能” - MySQL 服务端默认
max_connections有限(通常 151),并行太多反而触发拒绝连接
真正可行的并行提速方案:用 shell / bat 脚本控制多个 mysqldump 实例
这是目前唯一稳定、可控、可监控的并行路径。关键点不是“让 Navicat 并行”,而是“不用 Navicat 调度”:
- Linux 示例(注意 I/O 瓶颈):
mysqldump -h192.168.1.10 -uuser1 -p'pass1' db1 | gzip > /backup/db1_$(date +%F).sql.gz &<br>mysqldump -h192.168.1.11 -uuser2 -p'pass2' db2 | gzip > /backup/db2_$(date +%F).sql.gz &<br>wait
- Windows PowerShell 示例:
Start-ThreadJob { mysqldump -h... db1 > db1.sql }<br>Start-ThreadJob { mysqldump -h... db2 > db2.sql }<br>Get-Job | Wait-Job - 必须显式重定向输出(
> file.sql),否则进程会卡在等待 stdout flush - 建议限制并行数 ≤ 3~4,尤其当目标盘是机械硬盘或 NFS 时,并行过多反而降低吞吐
容易被忽略但致命的细节
很多人试了脚本并行仍没提速,问题往往不在并发逻辑本身:
- 临时目录或备份路径落在 OneDrive / iCloud / NAS 挂载点上:这些文件系统有同步延迟和缓存重试,
ls -l看起来正常,但write()实际被阻塞 - MySQL 服务端未调优:
max_allowed_packet过小会导致大表 dump 中断重连;innodb_buffer_pool_size不足会让mysqldump频繁刷盘 - Navicat 自身仍在后台运行且开启详细日志(
navicat.log高频刷盘),占用磁盘带宽,干扰外部脚本 I/O - 误以为“压缩=提速”:Navicat 默认 gzip -9 压缩,CPU 满载后反拖慢整体流程;应禁用 GUI 压缩,改用
gzip -1 dump.sql &异步处理


















