存储引擎出现错误 28(磁盘已满),但我的磁盘并未满

存储引擎出现错误 28(磁盘已满),但我的磁盘并未满

基本上,MySQL 给我很多“存储引擎出现错误 28”的错误,这意味着没有更多的可用磁盘空间。

的输出df -h为:

File system           Dim. Usati Disp. Uso% Montato su
/dev/md1               10G  7,9G  1,6G  84% /
tmpfs                 2,0G     0  2,0G   0% /lib/init/rw
udev                   10M  176K  9,9M   2% /dev
tmpfs                 2,0G     0  2,0G   0% /dev/shm
/dev/md2              683G  601G   48G  93% /home

这里的每个文件系统都不为空。还有其他问题吗?

我在
一台专用服务器(Debian 64 位)上
,在执行大量查询时发生错误

答案1

您的查询可能会使 MySQL 创建临时表。在默认配置下,这些表将与其他表一起创建,这些表很可能位于/仅剩 1.6GB 的分区上,并且这些表很快就会变得比这更大。

执行此类查询时请注意您的可用空间。

本文档关于它。

答案2

另外两种可能性:

  1. 文件系统通常会保留 5% 的空间,当空间达到 95% 时会返回错误。您的空间/home已达到 93%。
  2. 当您用完 inode 时,即使还有磁盘空间,也会收到相同的错误消息。您可以使用 查看 inode df -i

我认为 SvenW 的答案更可能是正确的。他的推理很有道理,我自己也遇到过完全相同的问题。

EXPLAIN <query>您可以通过在 MySQL 实例中运行并替换<query>实际查询来确定查询是否要使用临时表。您正在寻找Extra部分中的“使用临时”。如果临时表大于max_heap_table_size和/或tmp_table_size在您的 中,则它们将被写入磁盘my.cnf

tmpdir您可以通过查看正在运行的实例 ( mysql> SHOW VARIABLES LIKE 'tmpdir';) 或您的my.cnf( grep tmpdir my.cnf)中的变量来找到 MySQL 用于临时表的目录。

相关内容