Помилка файлу MySQL / запису (Errcode 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
Звільніть місце на пристрої.
Ешвін,

1
У мене сьогодні з’явилася ця помилка на пристрої, на якому використано лише 11%. Я перезавантажив машину, і після цього все було нормально, але, здається, ця помилка може статися, навіть коли є вільний простір.
Elkvis

Як зазначено вище, код помилки 28 означає, що на диску недостатньо місця. Зверніть увагу, що це повідомлення про помилку сервера, а не клієнт. Тож переконайтеся, що ви перевіряєте на правильному сервері.
Сергій Сіньковський

Відповіді:


117

Використовуйте perrorкоманду :

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

Якщо у вашій системі коди помилок не відрізняються, ваша файлова система заповнена.


7
msgstr "ваша файлова система заповнена". З якого боку? db-сервер або db-клієнт?
Марінос

це на 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%). Проблема полягала в inodes, у мене було занадто багато маленьких файлів, і мої inode були заповнені.

Ви можете перевірити статус inode за допомогою df -i


10

Помилка означає, що у вас недостатньо місця для створення тимчасових файлів, необхідних MySQL.

Перше, що ви можете спробувати, це збільшити розмір вашого /tmp/розділу. Якщо ви знаходитесь під LVM, перевірте lvextendкоманду.

Якщо ви не можете збільшити розмір вашого розділу, /tmp/ви можете працювати в конфігурації MySQL, відредагуйтеmy.cnf (як правило, увімкнений /etc/mysql/my.cnf) файл і знайдіть цей рядок:

tmpdir = /tmp/

Змініть його на що завгодно (приклад /var/tmp/). Просто переконайтеся, що у вас є місце і призначте дозвіл на запис для користувача mysql у новому каталозі.

Сподіваюся, це допомагає!


4

Запустіть такий код:

du -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

Ви також можете спробувати використовувати цей рядок, якщо інший не працює:

du -sh / var / lib / mysql / database_Name

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


0

Для користувачів xampp: на моєму досвіді, проблема була спричинена файлом із назвою «0» та розміщеним у папці «mysql». Розмір був занадтооооогромний (міна вибухнула приблизно до 256 Гб). Його усунення усунуло проблему.


0

Ця помилка виникає, коли у вас недостатньо місця в розділі. Зазвичай MYSQL використовує / tmp на серверах Linux. Це може трапитися з деякими запитами, оскільки пошук або повертав багато даних, або, можливо, навіть просто перебирав багато даних, створюючи великі тимчасові файли.

Відредагуйте файл /etc/mysql/my.cnf

tmpdir = / ваш / новий / реж

напр

tmpdir = / var / tmp

Має бути виділено більше місця, ніж / tmp, яке зазвичай знаходиться у власному розділі.


0

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

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) Я почав шукати, в яких папках використовується максимальна кількість inod:

 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.