Назад | Перейти на главную страницу

Получена ошибка 28 из механизма хранения (диск заполнен), но мой диск не заполнен

В основном MySQL выдает мне много ошибок типа «Получена ошибка 28 из механизма хранения», что означает, что на диске больше нет места.

Выход df -h является:

File system           Dim. Usati Disp. Uso% Montato su
/dev/md1               10G  7,9G  1,6G  84% /
tmpfs                 2,0G     0  2,0G   0% /lib/init/rw
udev                   10M  176K  9,9M   2% /dev
tmpfs                 2,0G     0  2,0G   0% /dev/shm
/dev/md2              683G  601G   48G  93% /home

Здесь не все файловые системы пусты. Есть ли другие проблемы?

Я на
- выделенный сервер (debian 64bit)
- и ошибки возникают при выполнении тяжелого запроса

Возможно, ваш запрос заставляет MySQL создавать временные таблицы. В конфигурации по умолчанию они будут созданы вместе с другими таблицами, что, вероятно, находится на вашем / раздел, в котором осталось всего 1,6 ГБ, и эти таблицы могут очень быстро стать большими.

Следите за своим свободным пространством, пока вы делаете такой запрос.

Видеть эта документация об этом.

Две другие возможности:

  1. Файловые системы часто резервируют 5% пространства и возвращают ошибку, когда оно заполняется на 95%. Ваш /home составляет 93%.
  2. Вы получаете такое же сообщение об ошибке, когда у вас заканчиваются inodes, даже если у вас все еще есть место на диске. Вы можете увидеть inodes с помощью df -i.

Я думаю, что ответ SvenW, скорее всего, будет верный. Его доводы верны, и я сам столкнулся с той же проблемой.

Вы можете выяснить, будет ли запрос использовать временную таблицу, запустив EXPLAIN <query> в вашем экземпляре MySQL, заменив <query> с фактическим запросом. Вы ищете "Временное использование" в Extra раздел. Временные таблицы будут записаны на диск, если они больше, чем max_heap_table_size и / или tmp_table_size в твоем my.cnf.

Вы можете узнать, какой каталог MySQL использует для временных таблиц, посмотрев на tmpdir переменная либо в запущенном экземпляре (mysql> SHOW VARIABLES LIKE 'tmpdir';) или в вашем my.cnf (grep tmpdir my.cnf).