Access denied
MySQL server has gone away
Can't connect to [local] MySQL server
Host '...' is blocked
Too many connections
Some non-transactional changed tables couldn't be rolled back
Out of memory
Packet too large
The table is full
Can't create/write to file
Commands out of sync
Ignoring user
Table 'xxx' doesn't exist
Can't initialize character set xxx
File not found
)Buy this Reference Manual in softcover from Barnes & Noble!
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
!
Add your own comment.