You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu系统MySQL执行复杂查询报No Space Left On Device错误求助

解决MySQL执行复杂查询时提示"No space left on device"但磁盘有剩余空间的问题

我之前帮同事排查过一模一样的问题,你遇到的这个报错看起来是MySQL临时文件目录的配置或者分区空间的「隐性问题」,下面一步步给你拆解排查和解决方法:

先确认错误里的临时文件目录实际空间

报错里的临时文件路径是/mnt/disk/tmp/MY0Wy7vA,你说磁盘有11G空闲,但一定要单独检查这个目录所在分区的空间,而不是只看整个磁盘的总空间:

  • 执行命令:df -h /mnt/disk/tmp/
    这个命令会直接显示/mnt/disk/tmp/所在分区的使用情况——很多时候用户误以为磁盘总空间够,但tmp所在的是一个单独的小分区(比如当初挂载时只给了tmp分区几个G),早就被占满了。

检查MySQL的临时目录配置

如果上面的分区确实有足够空间,那就要看MySQL是不是真的在使用你以为的磁盘:

  1. 登录MySQL:mysql -u root -p
  2. 执行查询:SHOW VARIABLES LIKE 'tmpdir';
    看看返回的结果是不是/mnt/disk/tmp/。如果是的话,可能存在两种情况:
    • 这个目录里有隐藏的大文件没被统计,用du -sh /mnt/disk/tmp/看看目录总大小;
    • 复杂排序/分组查询需要生成超大临时文件,瞬间占满了分区剩余空间,报错后临时文件被自动删除,所以你监控df时没看到空间变化。

解决方法:更换MySQL的临时文件目录

如果确认当前tmpdir所在分区空间不够,直接把临时目录换到有足够空间的位置:

  1. 找一个有充足空闲的目录,比如/home/mysql_tmp,先创建它:sudo mkdir /home/mysql_tmp
  2. 修改权限,让mysql用户能读写:sudo chown mysql:mysql /home/mysql_tmp && sudo chmod 700 /home/mysql_tmp
  3. 编辑MySQL的配置文件,比如/etc/mysql/mysql.conf.d/mysqld.cnf(不同Ubuntu版本路径可能略有不同,找不到的话可以用find /etc/mysql -name "*.cnf"查找),找到tmpdir这一行,改成:
    tmpdir = /home/mysql_tmp
    
  4. 重启MySQL服务:sudo systemctl restart mysql

额外排查点:磁盘配额

如果上面的方法都没用,检查下是不是mysql用户被设置了磁盘配额:

  • 先安装quota工具:sudo apt install quota
  • 执行repquota -a,看看mysql用户的磁盘使用是不是被限制了,导致无法写入大的临时文件。

内容的提问来源于stack exchange,提问作者Ahmedn1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:29:05