MySQL / Ошибка записи файла (код ошибки 28)


84

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

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

Любые идеи - это проблема с местом на жестком диске на моем сервере?


3
Достаточно ли свободного места на диске?
NDM

4
Освободите место на вашем устройстве.
Ashwin A

1
Эта ошибка появилась сегодня на устройстве, на котором используется только 11%. Я перезагрузил компьютер, и после этого все было нормально, но, похоже, эта ошибка может произойти даже при наличии свободного места.
Элквис 08

Как указано выше, код ошибки 28 означает, что на диске недостаточно места. Обратите внимание, что это сообщение об ошибке сервера, а не клиента. Поэтому убедитесь, что вы проверяете правильный сервер.
Сергей Синьковский

Ответы:


117

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

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

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


7
«ваша файловая система заполнена». С какой стороны? сервер db или клиент db?
Marinos An

он находится на db_server. вы можете использовать его while true; do df -h /tmp; sleep 3; doneпри запуске сценария, чтобы узнать, сколько места используется временными таблицами.
vinicius.olifer

20

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

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


18

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

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


10

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

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

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

tmpdir = /tmp/

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

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


4

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

дю -sh / var / log / mysql

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

expire_logs_days = 3


du: нет доступа к `/ var / log / mysql ': нет такого файла или каталога
пользователь

должно бытьdu -sh /var/log/mysql.log
Никита 웃

1

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

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

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

0

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

дю -sh / var / lib / mysql / имя_базы_данных

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


0

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


0

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

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

tmpdir = / ваш / новый / каталог

например

tmpdir = / var / tmp

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


0

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

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- Ничего страшного !!!!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.