Ошибка 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.