it-swarm.cn

MySQL /写入文件错误(错误代码28)

我的一个Web应用程序出现以下错误 -

Query3 failed: Error writing file '/tmp/MY1fnqpm' (Errcode: 28) ... INSERT MailList... (removed the rest of the query for security reasons)

任何想法 - 这是我的服务器上的一些硬盘空间问题?

76
Zabs

使用 perror命令

$ perror 28
OS error code  28:  No space left on device

除非系统上的错误代码不同,否则文件系统已满。

108
Arnaud Le Blanc

我们遇到过类似的问题,问题是MySQL使用/ tmp目录满足其需求(默认配置)。/tmp位于自己的分区上,对于大型MySQL请求而言空间太小。

有关详细信息,请查看以下答案: https://stackoverflow.com/a/3716778/994302

18
XSeryoga

我有同样的问题,但磁盘空间还可以(只有40%满)。问题是inode,我有太多的小文件,我的inode已满。

您可以使用df -i检查inode状态

15
Turshija

该错误意味着您没有足够的空间来创建MySQL所需的临时文件。

您可以尝试的第一件事是扩展/tmp/分区的大小。如果您在LVM下,请检查lvextend命令。

如果您无法增加分区/tmp/的大小,您可以在MySQL配置中工作, 编辑my.cnf(通常在/etc/mysql/my.cnf上)文件并查找以下行:

tmpdir = /tmp/

根据需要更改它(例如/var/tmp/)。只需确保有空间并为新目录中的mysql用户分配写权限。

希望这可以帮助!

9
SlayerX

运行以下代码:

du -sh/var/log/mysql

也许mysql二进制日志填满了内存,如果是这样,请按照旧日志的删除并重启服务器。另外在my.cnf中添加:

expire_logs_days = 3

4
Alex

对于xampp用户:根据我的经验,问题是由名为“0”且位于“mysql”文件夹中的文件引起的。尺寸太大了(我的爆炸到大约256 Gb)。它的删除解决了这个问题。

0
Sandro Rosa

我有同样的错误,问题是我的虚拟机上没有足够的空间。我删除了一些不必要的文件,它又开始工作了。

我的内存/磁盘空间分配看起来像这样

df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   37G   37G  127M 100% /
...
0
Samuel Frost

今天。我有同样的问题...我的解决方案:

1)检查inode:df -i我看到:

[email protected]:/etc/mysql# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 124696 304 124392 1% /dev
tmpfs 127514 452 127062 1% /run
/dev/vda1 1969920 1969920 0 100% /
tmpfs 127514 1 127513 1% /dev/shm
tmpfs 127514 3 127511 1% /run/lock
tmpfs 127514 15 127499 1% /sys/fs/cgroup
tmpfs 127514 12 127502 1% /run/user/1002

2)我开始查看哪些文件夹使用了最大数量的inods:

 for i in /*; do echo $i; find $i |wc -l; done

很快我在/ home/tomnolane/tmp文件夹中找到了包含大量文件的文件夹。

3)我删除了/ home/tomnolane/tmp文件夹PROFIT。

4)检查:

Filesystem      Inodes  IUsed   IFree IUse% Mounted on
udev            124696    304  124392    1% /dev
tmpfs           127514    454  127060    1% /run
/dev/vda1      1969920 450857 1519063   23% /
tmpfs           127514      1  127513    1% /dev/shm
tmpfs           127514      3  127511    1% /run/lock
tmpfs           127514     15  127499    1% /sys/fs/cgroup
tmpfs           127514     12  127502    1% /run/user/1002

没关系。

5)restart mysql service - 没关系!!!!

当分区中没有足够的空间时,会发生此错误。通常MYSQL在linux服务器上使用/ tmp。某些查询可能会发生这种情况,因为查找要么返回大量数据,要么甚至可能只是筛选大量数据来创建大型临时文件。

编辑您的/etc/mysql/my.cnf

tmpdir =/your/new/dir

例如

tmpdir =/var/tmp

应该分配比/ tmp更多的空间,通常在它自己的分区中。

0
Daniel Bernardez

如果另一行不起作用,您也可以尝试使用此行:

du -sh/var/lib/mysql/database_Name

您可能还想与您的主机核实,看看它们允许您的数据库有多大。

0
Wyatt