MySQL /写入档案错误(错误代码28)


82

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

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

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


3
是否有足够的可用磁盘空间?
NDM

4
释放设备上的一些空间。
Ashwin,

1
我今天在仅使用11%的设备上弹出此错误。我重新启动了计算机,此后一切都很好,但是即使有可用空间,似乎也可能发生此错误。
Elkvis 2014年

如上所述,错误代码28表示磁盘空间不足。请注意,这是服务器错误消息,而不是客户端。因此,请确保您正在检查正确的服务器。
Sergey Sinkovskiy

Answers:


117

使用perror命令

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

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


7
“您的文件系统已满”。在哪一边?数据库服务器还是数据库客户端?
Marinos

它在db_server上。您可以while true; do df -h /tmp; sleep 3; done在运行脚本时使用以查看临时表使用了多少空间。
vinicius.olifer

20

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

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


16

我遇到了同样的问题,但是磁盘空间还可以(只有40%的空间已满)。问题是索引节点,我的小文件太多,索引节点已满。

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


10

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

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

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

tmpdir = /tmp/

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

希望这可以帮助!


4

运行以下代码:

du -sh / var / log / mysql

也许mysql二进制日志已填满内存,如果是,请按照清除旧日志的方式重新启动服务器。还要添加my.cnf:

expire_logs_days = 3


du:无法访问`/ var / log / mysql':没有这样的文件或目录
用户

应该是du -sh /var/log/mysql.log
Nikita

1

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

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

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

0

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

du -sh / var / lib / mysql / database_Name

您可能还需要与主机进行核对,并查看它们允许数据库的大小。


0

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


0

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

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

tmpdir = /您的/新的/目录

例如

tmpdir = / var / tmp

应该分配的空间比通常在其自己分区中的/ tmp更大。


0

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

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

root@vm22433:/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-没关系!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.