必须改系统级 temp/tmp 环境变量,只调 navicat 的「默认备份目录」完全无效,因其仅控制最终 .nb3 文件位置,而导出/还原等过程生成的临时文件(如 navicat_temp_abc123、.tmp、解压缓存)全部依赖系统 temp/tmp 变量,默认指向 c:users\appdatalocal emp 或 c:windows emp,故即使备份路径设在 z 盘,c 盘仍会被写爆。
必须改系统级 temp/tmp 环境变量,只调 navicat 的「默认备份目录」完全无效。
为什么改了备份路径 C 盘还是狂掉空间
Navicat 的「默认备份目录」只控制最终 .nb3 文件存哪;而导出/还原/同步过程中生成的临时文件(如 navicat_temp_abc123 文件夹、*.tmp、解压缓存、校验段)全部走 Windows 的 TEMP 和 TMP 环境变量路径——默认就是 C:Users<username>AppDataLocalTemp</username> 或 C:WindowsTemp。哪怕你把备份目标设到 Z 盘,只要这两个变量没动,C 盘照常被写爆。
常见错误现象:
- 执行一次 500MB 的数据库导出,C 盘瞬间少掉 1.2GB 空间
- 任务结束后
%TEMP%里残留多个navicat_*.tmp文件夹,手动删不掉(被锁) - Navicat 17 导出到 SQLite 报“磁盘空间不足”,但目标路径所在盘明明有 50GB 剩余
怎么永久改掉 Navicat 的临时目录
Navicat 没有图形界面选项改这个,它 100% 继承系统变量。操作必须包含以下四步,缺一不可:
- 新建一个**无空格、无中文、有足够空间**的文件夹,例如:
D: avicat_temp - 以管理员身份打开「系统属性 → 高级 → 环境变量」,在「系统变量」区域分别修改
TEMP和TMP,值都设为D: avicat_temp - 手动创建该目录,并右键 → 属性 → 安全 → 编辑 → 给当前用户勾选「完全控制」
- 彻底退出 Navicat(包括托盘图标),建议重启电脑,再执行一次小导出,去
D: avicat_temp下确认是否出现navicat_*临时文件夹
大库导出前必须做的空间预估和清理
临时空间不是按备份文件大小线性增长的。启用压缩/加密、处理 BLOB、字符转码时,临时占用常达原始数据的 1.5–2 倍。别等报错才动手:
- 导出前先运行:
dir /s %TEMP% | findstr "File(s)",确认当前%TEMP%总大小 ≤ 500MB - 关闭所有 Navicat 进程后,进
%TEMP%按修改时间排序,删掉所有navicat_*开头的文件夹和*.tmp文件 - 顺手检查
%LOCALAPPDATA%Navicat下是否有Cache或Temp子目录,一并清空 - 对 >1GB 的库,导出前在命令行跑:
du -sh D: avicat_temp(Linux/macOS)或dir D: avicat_temp(Windows),确保剩余空间 ≥ 预估数据量 × 1.8
自动化清理临时文件的脚本要点
仅靠手动清理不可靠,尤其在定时任务场景下。PowerShell 脚本比系统磁盘清理更精准:
- 必须加
-File参数:避免误删TempMySQL这类结构化子目录 - 用
AddHours(-2)而非AddDays(-1):Navicat 临时文件几秒到几分钟就该释放,留太长时间等于积压 - 必须加
-Force:很多.tmp是只读或隐藏属性,不加会跳过 - 示例命令:
Get-ChildItem "D: avicat_temp" -File -Force | Where-Object {$_.LastAccessTime -lt (Get-Date).AddHours(-2)} | Remove-Item -Force -ErrorAction SilentlyContinue
真正容易被忽略的是:环境变量改完后,Navicat 后台服务(NavicatScheduler.exe)可能仍继承旧的 TEMP 值,必须重启整个进程树,不能只关主窗口。











