Out of resources when opening file


Ошибка MySQL  Error: Out of resources when opening file './example/parser.MYD' (Errcode: 24) может возникать из-за того, что сервер баз данных использует все доступные файловые дескрипторы.



Увидеть ее можно в логе веб-севрера Apache:


[Thu Aug 31 07:01:35 2017] [warn] [client 123.123.123.123] mod_fcgid: stderr: \xd0\x91\xd0\xb0\xd0\xb7\xd0\xb0 \xd0\xb4\xd0\xb0\xd0\xbd\xd0\xbd\xd1\x8b\xd1\x85 WordPress \xd0\xb2\xd0\xbe\xd0\xb7\xd0\xb2\xd1\x80\xd0
\xb0\xd1\x82\xd0\xb8\xd0\xbb\xd0\xb0 \xd0\xbe\xd1\x88\xd0\xb8\xd0\xb1\xd0\xba\xd1\x83 Out of resources when opening file '/tmp/#sql_977_0.MAD' (Errcode: 24) \xd0\xb2 \xd0\xbe\xd1\x82\xd0\xb2\xd0\xb5\xd1\x82 \xd0\
xbd\xd0\xb0 \xd0\xb7\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd1\x81 SELECT t.*, tt.* FROM rp_terms AS t INNER JOIN rp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN rp_term_relationships AS tr ON tr.term_tax
onomy_id = tt.term_taxonomy_id WHERE tt.taxonomy IN ('category') AND tr.object_id IN (9993) ORDER BY t.name ASC , \xd0\xb2\xd1\x8b\xd0\xbf\xd0\xbe\xd0\xbb\xd0\xbd\xd0\xb5\xd0\xbd\xd0\xbd\xd1\x8b\xd0\xb9 require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/themes/roomplan/single.php'), get_previous_post_link, get_adjacent_post_link, get_permalink, get_the_category, get_the_terms, wp_get_object_terms, get_terms, WP_Term_Query->query, WP_Term_Query->get_terms, referer: https://www.yandex.ru/



Как исправить ошибку 'Out of resources when opening a file'



Авторизуемся в консоли MySQL

mysql -u root -p



Просматриваем значение переменной, задающей максимальное возможное количество открытых файлов

SHOW VARIABLES LIKE 'open_files_limit'

Variable_name       Value

open_files_limit    1024



Ошибка возникает из-за того, что файлов создается больше, чем указано в данной директиве — значение нужно увеличить, это делается в конфигурационном файле сервера баз данных



mcedit  /etc/my.cnf

[mysqld]
open_files_limit = 4096



Перезапускаем MySQL

/etc/init.d/mysql restart



Если перезапускать MySQL нельзя (например, он обслуживает систему доступность которой критична) выполняем в консоли MySQL — от имени root



SET GLOBAL open_files_limit=4096;



Команда сменит лимит для сервера баз данных для текущей сессии. Настройки будут в силе до перезапуска сервиса. Чтобы они применились при следующем запуске нужно добавить их в конфигурацию.


Также значение возможных дескрипторов задается в настройках безопасности системы:

mcedit /etc/security/limits.d/mysql.conf



Дописываем строку

mysql  —  nofile  4096

Посмотреть системные ограничения можно из консоли



ulimit -a

Также как и задать новое значение используя флаг -n

ulimit -n 4096



Читайте также про системные лимиты и оптимизацию MySQL.

Сказать спасибо