Мой диск заполнен, файл .MAD в tmpdir занимает все место в файловой системе (179 ГБ из 189 ГБ)
из журнала:
[Предупреждение] mysqld: Диск полностью записывает '/var/tmp/#sql_b6f_0.MAD' (код ошибки: 28). Жду, пока кто-нибудь освободит место
Могу ли я остановить работу mariadb, или мне нужно сначала освободить место, а затем остановить его?
Я смог сделать service mysqld stop
и это удалило файлы в tmpdir, что решило проблему ....
Ааааа, я искал исправление ровно 5 часов! Однако я довольно новичок, так что да ... Мы запускаем нашу MariaDB на сервере SUSE Linux в производстве, поэтому остановка всей службы mysql не была для меня хорошим вариантом.
Я запустил select
запрос с вложенными выборками с использованием order by
и inner join
и это была моя точная ошибка:
Код ошибки: 1021 Диск заполнен (/ tmp / # sql_xxx_y.MAI); ждем, пока кто-нибудь освободит место ... (ошибка: 28 «На устройстве не осталось места»)
Подключившись к серверу и запустив
cd /tmp
ls -al
или
ls-lh
Я смог найти виновных: #sql_xxx_y.СУМАСШЕДШИЙ (размером с мое общее доступное пространство на разделе tmp) и #sql_xxx_y.MAI размер 8К (это должен быть временный запрос). Также файл * .MAD будет постоянно обновлять свою дату - еще один индикатор того, что запрос все еще выполняется!
Итак, эта ветка и этот другой помогли мне разобраться:
mysql -u root -p
show processlist;
kill "thread_id (number in 1st col of the faulty query)";
Я побежал show processlist;
дважды после этого: 1-й раз он показал мой запрос как убит, второй раз мой запрос исчез из списка и .СУМАСШЕДШИЙ и .MAI файлы исчезли, и мое дисковое пространство вернулось на место.
Примечание: к счастью, мой «ошибочный» запрос был произвольным, не изменял никаких таблиц и не был настроен на регулярный запуск / от какого-либо веб-сервиса или клиента в производстве. Так что будьте осторожны, если ваша ситуация отличается, то все те темы, где кто-то вроде меня может легко потратить 5 часов, все еще могут быть полезны: D