В нашей производительной системе мы недавно отказались от стола размером 1 ТБ. После завершения отбрасывания таблица исчезла в mysql, но файл все еще присутствовал в папке / lib / mysql / dbname /. (Мы используем один файл для каждой настройки таблицы) Я удалил файлы, связанные с таблицей.
Я проверил с
lsof | grep crawl_link | grep deleted
и обнаружил, что в процессе mysql все еще есть открытые дескрипторы
mysqld 38115 mysql 11uW REG 8,3 1016938364928 182524780 /var/lib/mysql/seobility/_crawl_links_new.ibd (deleted)
mysqld 38115 2110 mysql 11uW REG 8,3 1016938364928 182524780 /var/lib/mysql/seobility/_crawl_links_new.ibd (deleted)
mysqld 38115 4530 mysql 11uW REG 8,3 1016938364928 182524780 /var/lib/mysql/seobility/_crawl_links_new.ibd (deleted)
mysqld 38115 8192 mysql 11uW REG 8,3 1016938364928 182524780 /var/lib/mysql/seobility/_crawl_links_new.ibd (deleted)
(Total 120 Lines)
Я знаю, что проблема будет решена путем перезапуска MySql, но наша база данных работает на 2 ТБ +, и мне бы очень хотелось избежать простоев.
Есть ли способ отбросить дескриптор файла и освободить занимаемое дисковое пространство?
Очевидное решение - убить (или перезапустить) процесс, содержащий дескриптор файла (идентификатор процесса 38115, как показано на lsof
вывод).
Если вы не хотите этого делать, вы можете обрезать файл (даже если он удален), чтобы освободить место на диске. Вы можете попробовать следующее:
$ :> /proc/38115/fd/11
куда 38115
это идентификатор процесса и 11
- дескриптор файла. Не забывайте при необходимости запускать как root.