linux版navicat导出失败报“permission denied”或生成空文件,根本原因是mysqldump写入目标路径或临时目录时被系统拒绝:用户对备份路径无写权限、/tmp被noexec挂载、或定时任务未继承shell环境变量;应检查路径权限、改用用户目录、设置tmpdir及绝对路径。
linux版navicat导出失败,报错提示“permission denied”或生成空文件,根本不是navicat本身的问题,而是它调用的mysqldump(或其他导出命令)在写入目标路径时被系统拒绝——你当前用户对那个目录没有写权限,或者mysqldump运行时使用的临时目录不可写。
导出时提示 Permission denied 或无法创建文件
这是最典型的 Linux 权限问题。Navicat 在 Linux 下以当前 GUI 用户身份运行,但它执行备份时会 fork 出 mysqldump 进程,该进程继承的是用户权限,而非 root。一旦你把备份路径设为 /var/backups/、/opt/ 或其他非用户主目录下的系统路径,就极大概率触发拒绝写入。
- 检查目标路径是否可写:
ls -ld /path/to/backup,确认输出中包含drwxr-xr-x且你的用户名在 owner 或 group 里 - 别用 root 路径:比如
/root/backups或/usr/local/mysql-backup—— 普通用户默认无权写入 - 临时修复:把备份路径改成
/home/yourname/backup/,并确保该目录存在:mkdir -p /home/yourname/backup - 如果必须写到系统路径,不要 sudo 启动 Navicat(GUI 应用不推荐),而是改用
chown或chmod授权,例如:sudo chown $USER:$USER /var/backups
导出成功但文件为空,或日志显示 Can't create/write to file (Errcode: 13)
这个错误码(13)是 Linux 内核返回的 EACCES,明确表示“权限不足”,但常被误判为数据库权限问题。实际多发生在 mysqldump 内部需要写临时文件的环节,比如排序大表、生成压缩流时用到的 TMPDIR。
- Navicat 默认使用系统
/tmp,而某些发行版(如 Ubuntu 22.04+)默认挂载/tmp为noexec,nodev,nosuid,虽不影响写,但部分 MySQL 客户端版本会因安全策略拒绝在此创建临时文件 - 验证方式:
mount | grep " /tmp ",若看到noexec,就是隐患 - 解决办法:在启动 Navicat 前手动指定干净的临时目录:
TMPDIR="/home/yourname/tmp" navicat(先mkdir -p /home/yourname/tmp) - Navicat GUI 内也可设置:「工具」→「选项」→「备份」→「临时目录」填绝对路径,如
/home/yourname/navicat-tmp
用定时任务导出时权限失效
通过 Navicat 的「计划任务」功能触发的备份,是在后台以 cron 或 systemd user session 方式运行的,它不会加载你的 shell profile(~/.bashrc、~/.profile),所以 PATH 中可能找不到 mysqldump,或 TMPDIR 未继承,导致静默失败。
- 务必在定时任务设置中手动填写
mysqldump的绝对路径,例如:/usr/bin/mysqldump(用which mysqldump确认) - 避免依赖环境变量;所有路径都用绝对路径,包括备份目标路径和临时目录
- 检查定时任务日志:Navicat 会在「工具」→「计划任务」→ 右键任务 →「查看日志」里显示 stderr 输出,重点找
Permission denied或command not found - 如果仍失败,可临时让任务执行一个 shell 脚本,在脚本开头显式设置:
export TMPDIR="/home/yourname/tmp"
真正卡住的地方往往不在 Navicat 界面里,而在它背后调用的命令行工具所处的 Linux 文件系统上下文中——路径是否属于你、临时目录是否被挂载限制、定时任务是否脱离了你的 shell 环境,这三个点漏掉任何一个,都会让导出看起来“莫名其妙失败”。











