【问题标题】:MySQL/Writing file error (Errcode 28)MySQL/写入文件错误 (Errcode 28)
【发布时间】:2011-11-16 23:02:09
【问题描述】:

我们的一个网络应用程序出现以下错误 -

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

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

【问题讨论】:

  • 是否有足够的可用磁盘空间?
  • 释放设备上的一些空间。
  • 我今天在仅使用 11% 的设备上弹出此错误。我重新启动了机器,之后就好了,但似乎即使有可用空间也会发生此错误。
  • 如上所述 错误代码 28 表示磁盘空间不足。请注意,这是一条服务器错误消息,而不是客户端。因此,请确保您检查的是正确的服务器。
  • 正如其他人指出的那样,这可能是由于设备上的可用空间不足造成的。另一个原因可能是拒绝对挂载点进行写访问。

标签: mysql logging


【解决方案1】:

我遇到了同样的问题,经过一番研究后发现 snap 目录占用了大部分空间。所以执行以下命令来摆脱它:

sudo apt autoremove --purge snapd

之后运行以下命令以摆脱无用的/dev/loop 挂载:

`sudo apt purge snapd ubuntu-core-launcher squashfs-tools`

然后运行以下命令重新启动mysql:

sudo service mysql restart

它对我有用!

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      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 文件夹 利润。

      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 - 没关系!!!!

      【讨论】:

        【解决方案4】:

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

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

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

        tmpdir = /tmp/

        随心所欲地改变它(例如/var/tmp/)。只要确保有空间并为新目录中的 mysql 用户分配写权限即可。

        希望这会有所帮助!

        【讨论】:

          【解决方案5】:

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

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

          tmpdir = /your/new/dir

          例如

          tmpdir = /var/tmp

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

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

              【讨论】:

                【解决方案8】:

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

                du -sh /var/lib/mysql/database_Name

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

                【讨论】:

                  【解决方案9】:

                  运行以下代码:

                  du -sh /var/log/mysql

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

                  expire_logs_days = 3

                  【讨论】:

                  • du: 无法访问`/var/log/mysql': 没有这样的文件或目录
                  • 应该是du -sh /var/log/mysql.log
                  【解决方案10】:

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

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

                  【讨论】:

                    【解决方案11】:

                    使用perror command

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

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

                    【讨论】:

                    • “您的文件系统已满”。在哪一边?数据库服务器还是数据库客户端?
                    • 它在 db_server 上。您可以在运行脚本时使用while true; do df -h /tmp; sleep 3; done 来查看临时表使用了多少空间。
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-04-01
                    • 2010-11-02
                    • 2019-01-11
                    • 2016-04-18
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多