Получение от MySQL ERROR '...' not found
(errno: 23), Can't open file: ... (errno: 24), или
любой другой ошибки с номером 23 или
24 означает, что для MySQL выделено
недостаточно файловых
дескрипторов. Можно использовать
утилиту perror для получения описания
ошибки с определенным номером:
shell>perror 23File table overflow shell>perror 24Too many open files shell>perror 11Resource 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
Раздел 4.5.6.4, «SHOW VARIABLES»). Проще всего это
сделать путем добавления опции в
файл опций (see Раздел 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!
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
