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). Это может не полностью предотвратить исчерпание дескрипторов файлов, поскольку в некоторых обстоятельствах сервер может временно попытаться увеличить размер кэша, как описано в Разделе 8.4.3.1, «Как MySQL открывает и закрывает таблицы». Уменьшение значения max_connections также уменьшает количество открытых файлов (значение по умолчанию равно 100).
Чтобы изменить количество дескрипторов файлов, доступных для mysqld, вы можете использовать опцию --open-files-limit для mysqld_safe или установить системную переменную open_files_limit. См. Раздел 5.1.7, «Системные переменные сервера». Самый простой способ установить эти значения — добавить опцию в ваш файл настроек. См. Раздел 4.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.