A.2.16 Не найден файл (File not found
)
Получение от MySQL ERROR '...' not found (errno: 23), Can't open file: ...
(errno: 24)
, или любой другой ошибки с номером 23 или 24 означает, что
для MySQL выделено недостаточно файловых дескрипторов. Можно использовать
утилиту perror для получения описания ошибки с определенным номером:
shell> perror 23
File table overflow
shell> perror 24
Too many open files
shell> perror 11
Resource temporarily unavailable
Проблема здесь в том, что mysqld
пытается одновременно держать открытыми
слишком много файлов. Можно либо указать mysqld
не открывать так много
файлов одновременно, либо увеличить количество файловых дескрипторов,
доступных mysqld
.
Чтобы предписать mysqld
держать одновременно открытыми меньше файлов,
можно уменьшить табличный кэш, задав safe_mysqld
опцию -O table_cache=32
(значение по умолчанию 64). Уменьшение значения max_connections
также
уменьшит количество открытых файлов (по умолчанию значение переменной 90).
Чтобы изменить число доступных mysqld
файловых дескрипторов, можно
использовать опцию --open-files-limit=#
в safe_mysqld
или опцию
-O open-files-limit=#
в mysqld
(see section 4.5.6.4 SHOW VARIABLES
). Проще всего это
сделать путем добавления опции в файл опций (see section 4.1.2 Файлы параметров `my.cnf').
Если используется ранняя версия mysqld
, не поддерживающая эту
возможность, можно отредактировать скрипт safe_mysqld
. В скрипте есть
закомментированная строка ulimit -n 256
; можно, убрав символ `#',
раскомментировать эту строку и, заменив значение 256 другим, повлиять на
количество доступных mysqld
файловых дескрипторов.
При помощи ulimit
(и open-files-limit
) можно увеличить количество файловых
дескрипторов только до предела, установленного в операционной системе.
Существует также "жесткий" предел, который может быть переопределен
только при запуске safe_mysqld
или mysqld
от имени пользователя root
(но
помните, что в этом случае также следует использовать опцию --user=...
).
Если необходимо увеличить предел ОС по количеству доступных отдельному
процессу файловых дескрипторов, обращайтесь к документации по своей
операционной системе.
Обратите внимание: при использовании tcsh ulimit
работать не будет! Кроме
того, tcsh
будет сообщать неверные значения при запросе текущих пределов!
В этом случае необходимо запускать safe_mysqld
с использованием sh
!