B.3.2.16 Ошибки «Файл не найден» и аналогичные
Если вы получаете ERROR
', file_name' not found (errno:
23)Can't open file:
или любую другую ошибку с file_name (errno: 24)errno 23 или errno 24 от MySQL, это означает, что вы не выделили достаточно дескрипторов файлов для сервера MySQL. Вы можете использовать утилиту perror, чтобы получить описание, что означает данный номер ошибки:
$> perror 23
OS error code 23: File table overflow
$> perror 24
OS error code 24: Too many open files
$> perror 11
OS error code 11: Resource temporarily unavailable
Проблема в том, что mysqld пытается держать открытыми слишком много файлов одновременно. Вы можете либо указать mysqld, чтобы он не открывал так много файлов сразу, либо увеличить количество доступных дескрипторов файлов для mysqld.
Чтобы указать mysqld держать открытыми меньше файлов за раз, вы можете уменьшить кэш таблиц, уменьшив значение системной переменной table_open_cache (значение по умолчанию — 64). Это может не полностью предотвратить исчерпание дескрипторов файлов, так как в некоторых ситуациях сервер может временно попытаться увеличить размер кэша, как описано в Разделе 10.4.3.1, «Как MySQL открывает и закрывает таблицы». Уменьшение значения max_connections также уменьшает количество открытых файлов (значение по умолчанию — 100).
Чтобы изменить количество дескрипторов файлов, доступных для mysqld, вы можете использовать опцию --open-files-limit для mysqld_safe или установить системную переменную open_files_limit. См. Раздел 7.1.8, «Системные переменные сервера». Самый простой способ установить эти значения — добавить опцию в ваш файл конфигурации. См. Раздел 6.2.2.2, «Использование файлов конфигурации». Если у вас старая версия mysqld, которая не поддерживает настройку лимита открытых файлов, вы можете изменить скрипт mysqld_safe. В скрипте есть неактивированная строка ulimit -n 256. Вы можете удалить символ #, чтобы активировать эту строку, и изменить число 256, чтобы установить количество дескрипторов файлов, которые будут доступны для mysqld.
--open-files-limit и ulimit могут увеличить количество дескрипторов файлов, но только до предела, установленного операционной системой. Также существует «жёсткий» лимит, который можно переопределить только если вы запускаете mysqld_safe или mysqld как root (не забудьте, что в этом случае вам также нужно запустить сервер с опцией --user, чтобы он не продолжал работать как root после запуска). Если вам нужно увеличить лимит операционной системы на количество дескрипторов файлов, доступных для каждого процесса, обратитесь к документации вашей системы.
Если вы используете оболочку tcsh, ulimit не работает! tcsh также сообщает неверные значения, когда вы запрашиваете текущие лимиты. В этом случае вы должны запустить mysqld_safe с помощью sh.
© 2025 Oracle
Licensed under the GPLv2 License.