ERROR mysqld: Can't open file (errno: 24)

Нагрузка на сервер, обслуживающий веб-приложение часто вызывается MySQL. Установить так ли это можно проанализировав вывод atop. Если из него следует, MySQL нагружает сервер по CPU нужно необходимо проверить логи сервиса для того чтобы выяснить причины.

 

В журнале ошибок сервера баз данных /var/log/mysql/mysql-err.log иногда можно встретить следующие сообщения:

170126  4:40:10 [ERROR] mysqld: Can't open file: './somedb/sometable.frm' (errno: 24)
170126  4:40:10 [ERROR] mysqld: Can't open file: './somedb/sometable.frm' (errno: 24)
170126  4:40:10 [ERROR] mysqld: Can't open file: './somedb/sometable.frm' (errno: 24)
170126  4:40:11 [ERROR] mysqld: Can't open file: './somedb/sometable.frm' (errno: 24)
170126  4:40:11 [ERROR] mysqld: Can't open file: './somedb/sometable.frm' (errno: 24)

 

somedb здесь — имя базы данных

sometable.frm — таблица БД

Из сообщений следует, что превышен лимит на количество открытых файлов для существующего процесса.

 

ERROR mysqld: Can't open file (errno: 24)

 

Как исправить ошибку ERROR mysqld: Can't open file (errno: 24)

Чтобы исправить ошибку нужно увеличить количество возможных открытых единовременно файлов. Прежде всего потребуется посмотреть актуальное значение переменной:

Заходим в консоль севера баз данных:

mysql -u root -p

 

Выполняем запрос и видим существующее значение, обычно это 1024 файла.

SHOW VARIABLES LIKE 'open%'

 

Переменная существует в режиме read-only и изменить ее значение из консоли MySQL не получится (запрос мог бы выглядеть как SET open_files_limit=100000)

 

Чтобы отредактировать значение переменной open_files_limits нужно внести изменения в конфигурационный файл MySQL /etc/mysql/my.cnf

 

[mysqld]

open_files_limit = 100000

 

После того как лимит установлен перезапускаем службу:

/etc/init.d/mysql restart

 

В выводе запроса SHOW VARIABLES LIKE 'open%' теперь должно фигурировать новое значение.

Если ошибки ERROR mysqld: Can't open file (errno: 24) в логах продолжают возникать процедуру можно повторить вновь изменив значение переменной.