При использовании большого количества баз и/или таблиц в MySQL или MariaDB может вылазить ошибка:
Can’t open file: ‘./mysql/user.frm’ (errno: 24)
или
[ERROR] /usr/sbin/mysqld: Can’t open file: ‘./database/table.frm’ (errno: 24 — Too many open files)
errno: 24 — Too many open files дословно переводится, как открыто слишком много файлов.
Обычно проблема кроется в ограничении количества одновременно открытых файлов сервером. Решение данной проблемы простое. Состоит из нескольких шагов.
1. В консоли сервера вбиваем: lsof -u mysql | wc -l
В результате мы узнаем сколько сейчас mysql открыла файлов.
2. Увеличиваем количество одновременно открытых файлов. Для этого идем /etc/my.cnf. В секции [mysqld] ищем параметр open_files_limit и увеличиваем его. Если такого параметра нет, то создаем его. Например, open_files_limit = 20000 . Значение параметра должно быть больше значения из пункта 1.
Далее выполняем перезагрузку базы данных MySQL или MariaDB. Из консоли из PhpMyAdmin заходим в базу и вводим запрос:
SHOW VARIABLES LIKE ‘open_files_limit’;
В большинстве случаев будет написано:
Variable_name Value
open_files_limit 1024
Кому-то будет достаточно этих шагов. А кому-то придется выполнить остальные шаги.
3. Увеличим количество файловых дескрипторов пользователю с правами mysql, которые разрешено открывать. Обычно это пользователь с именем mysql. Идем /etc/security/limits.d/mysql.conf
Пишем в открытом файле или редактируем: mysql — nofile 20000
Цифра 20000 — это количество файлов, которое можно будет открывать пользователю с правами mysql.
4. Идем в каталог /etc/systemd/system/multi-user.target.wants/ . Редактируем файл mysql.service.
В файле ищем секцию [Service]. В нее дописываем или редактируем параметр LimitNOFILE=20000, 5. Далее перезапускаем демона в командной строке: systemctl daemon-reload .
6. Перезапускаем MySQL: systemctl restart mysql
7. Радуемся результату.
Ошибка mysql или mariaDB - Can't open file (errno: 24 - Too many open files),