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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

Подробнее см. этот ответ: fooobar.com/questions/88672/...

Ответ 3

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

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

Ответ 4

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

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

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

tmpdir =/tmp/

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

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

Ответ 5

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

du -sh/var/log/mysql

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

expire_logs_days = 3

Ответ 6

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

Ответ 7

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

du -sh/var/lib/mysql/database_Name

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

Ответ 8

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

Ответ 9

Перейдем к интересному случаю этого - имеем приложение Java, которое использует C3PO (для объединения) и Mysql Java Connector, пытающийся подключиться к удаленному серверу. Уверена, что вы получили ту же ошибку (Errcode: 28), но подтвердили такие вещи, как дисковое пространство, iNodes и разрешения. Могла касаться/создавать файлы в каталоге и было место для работы. Оказалось, что сервер (mysqld) имел проблему с пространством на своем конце. Вы все равно можете установить соединение с сервером, но если вы спросите о чем-нибудь, вы увидите ошибки на сервере. В случае Java Mysql Connector неспособность сервера отправлять обратно информацию, казалось, проявлялась как ошибка "на диске", но на самом деле это была совершенно другая проблема. Если вы продолжаете искать локальную машину server/unix, вы никогда не найдете проблему.

Ответ 10

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

Измените /etc/mysql/my.cnf

tmpdir =/your/new/dir

например

tmpdir =/var/tmp

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

Ответ 11

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

1) check inode: df -i Я видел:

[email protected]:/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 - это нормально !!!!