MySQL / Ошибка записи файла (код ошибки 28) - PullRequest
76 голосов
/ 14 сентября 2011

У меня следующая ошибка с одним из наших веб-приложений -

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

Есть идеи - это проблема с жестким диском на моем сервере?

Ответы [ 10 ]

109 голосов
/ 14 сентября 2011

Используйте команду perror :

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

Если коды ошибок не различаются в вашей системе, ваша файловая система заполнена.

18 голосов
/ 18 января 2013

Мы столкнулись с подобной проблемой, и проблема была в том, что MySQL использовал каталог / tmp для своих нужд (это конфигурация по умолчанию) И / tmp находился в своем собственном разделе, на котором было слишком мало места для больших запросов MySQL.

Для получения более подробной информации взгляните на этот ответ: https://stackoverflow.com/a/3716778/994302

15 голосов
/ 16 июля 2015

У меня была такая же проблема, но на диске все было в порядке (заполнено только на 40%). Проблема была в inode, у меня было слишком много маленьких файлов, и мои inode были переполнены.

Вы можете проверить состояние inode с помощью df -i

9 голосов
/ 11 июля 2014

Ошибка означает, что у вас недостаточно места для создания временных файлов, необходимых для MySQL.

Первое, что вы можете попробовать, - это увеличить размер вашего /tmp/ раздела.Если вы используете LVM, проверьте команду lvextend.

Если вы не можете увеличить размер своего раздела /tmp/, вы можете работать в конфигурации MySQL, отредактировать my.cnf (обычно в /etc/mysql/my.cnf) файл и найдите эту строку:

tmpdir = /tmp/

Измените его на любое, что вы хотите (пример /var/tmp/).Просто убедитесь, что у вас есть место и назначьте разрешение на запись для пользователя mysql в новом каталоге.

Надеюсь, это поможет!

4 голосов
/ 29 марта 2013

Запустите следующий код:

du -sh / var / log / mysql

Возможно, двоичные журналы mysql заполнили память. Если это так, выполните удаление старых журналов и перезапустите сервер. Также добавьте в my.cnf:

expire_logs_days = 3

1 голос
/ 27 декабря 2018

У меня была такая же ошибка, и проблема была просто нехватка места на моей виртуальной машине.Я удалил некоторые ненужные файлы, и он снова начал работать.

Распределение моей памяти / дискового пространства выглядело примерно так

df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   37G   37G  127M 100% /
...
0 голосов
/ 02 декабря 2018

Сегодня. У меня та же проблема ... мое решение:

1) контрольный код: 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) Я начал смотреть, какие папки используют максимальное количество инодов:

 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 - все нормально !!!!

0 голосов
/ 28 февраля 2018

Эта ошибка возникает, когда в разделе недостаточно места. Обычно MYSQL использует / tmp на серверах Linux. Это может произойти с некоторыми запросами, потому что поиск либо возвращал много данных, либо, возможно, просто просматривал много данных, создавая большие временные файлы.

Отредактируйте ваш /etc/mysql/my.cnf

tmpdir = / your / new / dir

1009 * например *

tmpdir = / var / tmp

Должно быть выделено больше места, чем / tmp, которое обычно находится в его собственном разделе.

0 голосов
/ 11 мая 2017

Для пользователей xampp: по моему опыту, проблема была вызвана файлом с именем «0», расположенным в папке «mysql».Размер был слишком большой (мой взорвался до 256 Гб).Его удаление устранило проблему.

0 голосов
/ 05 февраля 2015

Вы также можете попробовать использовать эту строку, если другая не работает:

du -sh / var / lib / mysql / database_Name

Вы также можете проверить с вашим хостоми посмотрите, насколько велики они позволяют вашим базам данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...