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

MySQL не выпускает дескрипторы временных файлов

Несколько дней назад мы столкнулись с некоторыми серьезными проблемами при установке MySQL: MySQL продолжает открывать временные файлы (нормальное поведение), но эти файлы никогда не выпускаются. Следствием этого является то, что в конечном итоге дисковое пространство исчерпывается, и нам приходится перезапускать службу и очищать / tmp вручную.

Используя lsof, мы видим что-то вроде этого:

mysqld    16866     mysql    5u      REG    8,3          0        692 /tmp/ibyWJylQ     (deleted)
mysqld    16866     mysql    6u      REG    8,3          0        707 /tmp/ibf5adsT  (deleted)
mysqld    16866     mysql    7u      REG    8,3          0        728 /tmp/ibGjPRyW (deleted)
mysqld    16866     mysql    8u      REG    8,3          0       5678 /tmp/ibMQDLMZ (deleted)
mysqld    16866     mysql   13u      REG    8,3          0       5679 /tmp/ibQAnM42 (deleted)

Возможно, это не связано, но когда мы выключаем сервер, файлы, наконец, освобождаются, и мы можем видеть следующие предупреждения в журнале MySQL:

121029  7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1333  user: 'xxx'
121029  7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1156  user: 'yyy'
121029  7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1151  user: 'zzz'

где «xxx», «yyy» и «zzz» - разные пользователи mysql (и единственные 3 пользователя с активными подключениями к базе данных).

У нас есть несколько теорий:

Мы используем Mysql 5.5 на RHEL 6.2 с ядром по умолчанию.

Что ж ... Это не совсем решение, но я считаю это концом исследования.

Похоже, это ошибка MySQL. Мы нашли это через эта ошибка это кажется дубликатом вот этот

В качестве обходного пути, чтобы избежать создания такого большого количества временных файлов, мы увеличили binlog_cache_size до разумного для нас значения (после небольшого тестирования приложения и проверки размера файлов с помощью lsof). Если вы хотите узнать больше, вы можете найти статья о других вариантах решения этой проблемы.

Надеюсь, это кому-то поможет;)

Для справки есть еще одна очень похожая ошибка: http://bugs.mysql.com/bug.php?id=66237. И это даже кажется не исправленным в 5.5.