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.