Navicat报“磁盘空间不足”90%是临时文件、备份命名不规范或目标库磁盘满所致;需改系统TEMP/TMP变量指向非C盘、用forfiles按LastWriteTime清理旧备份、并检查目标服务器磁盘空间。
navicat备份失败报“磁盘空间不足”,90%不是c盘真没空间,而是它把临时文件、备份文件、日志全堆在默认路径——而这些路径你根本没改过。
Navicat的临时文件不走备份路径,它认TEMP环境变量
很多人把备份路径改成D:\Backups,结果C盘还是飞速掉空间。因为Navicat压缩、校验、解包用的临时文件,完全不看你设的备份路径,只读Windows的TEMP和TMP环境变量。
- 必须改系统级变量:进入「系统属性 → 高级 → 环境变量」,在「系统变量」里把
TEMP和TMP都指向非C盘目录,例如D:\Navicat_Temp - 手动创建该目录,并给当前用户「完全控制」权限(右键 → 属性 → 安全 → 编辑)
- 改完后**必须重启Navicat所有进程**(包括托盘图标),甚至建议重启系统——否则变量不生效
- 验证方式:执行一次小备份,去
D:\Navicat_Temp里看是否有新生成的.tmp或.zip文件
备份文件堆积导致“保留N天”失效
Navicat的「保留最近7天」功能不是按文件修改时间删,而是靠文件名里的时间戳识别。一旦命名不规范,它就当没看见——旧备份越积越多,最后撑爆磁盘。
- 常见失效命名:
backup_1.nb3、prod.sql、含中文路径、OneDrive同步盘里的备份目录 - 勾选了
Include timestamp in filename但UI缓存未刷新?多窗口编辑后容易漏生效,重启Navicat再试 - 别依赖Navicat自动清理,用Windows自带
forfiles命令兜底:forfiles /p "D:\Backups" /s /d -7 /c "cmd /c echo @path"先预览,确认无误再把echo换成del -
/d -7是“早于7天前的00:00:00”,不是精确到秒;/s必须加,否则子目录不扫描
备份时目标库磁盘满,Navicat不报错但卡死
你本地磁盘有空,Navicat却在导入/同步阶段卡住不动、内存飙升、进度条冻结?大概率是目标数据库所在服务器磁盘写满了,错误被吞掉,只留no space left on device在后台日志里。
- 别查你自己的C盘,登录目标服务器跑
df -h,重点看/var/lib/mysql或/var/lib/postgresql挂载点 - MySQL用户优先清理binlog:
PURGE BINARY LOGS BEFORE '2026-07-20 00:00:00'; - Docker环境必须进容器查:
docker exec -it your-db-container df -h,扩容得挂载新卷,不是扩容器根分区 - PostgreSQL检查
log_directory配置路径,删日志前确认log_rotation_age已启用
真正卡住的点往往不在备份动作本身,而在临时目录、文件名规则、目标端磁盘这三处——它们都不在Navicat界面上显眼位置,但每一条都会让“磁盘空间不足”反复出现。


















