基本上,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
另外两种可能性:
- 文件系统通常会保留 5% 的空间,当空间达到 95% 时会返回错误。您的空间
/home
已达到 93%。 - 当您用完 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 用于临时表的目录。