пятница, 29 июня 2012 г.

Увеличение числа одновременно открытых файлов в MySQL сервере

Сегодня довелось решать проблему с превышением лимита одновременно открытых файлов у MySQL сервера. Ошибка, которая свидетельствует о такой проблеме выглядит так:

MySQL Error: Out of resources when opening file './db_name/table_name.MYD' (Errcode: 24)

Поскольку все коды ошибок я на память не помню, то первым делом заглянул в вывод perror:

$ perror 24
OS error code  24:  Too many open files

Смотрим сколько разрешено открывать файловых дескрипторов пользователю mysql (пользователь, с правами которого работает MySQL сервер).

$ sudo su - mysql -c 'ulimit -n'
1024

Далее смотрим, сколько дескрипторов разрешено в MySQL:

$ mysql -se "show variables like 'open_files_limit'"
Variable_name       Value
open_files_limit    1024

Увеличим лимит в 4 раза, до 4096:

$ echo 'mysql  -  nofile  4096' | sudo tee -a /etc/security/limits.d/mysql.conf
$ sudo su - mysql -c 'ulimit -n'
4096

Если лимит не изменился, то нужно посмотреть где подключен pam_limits.so в конфигурации PAM.

$ grep -r limits /etc/pam.*
/etc/pam.d/sshd:session    required     pam_limits.so
/etc/pam.d/atd:session    required   pam_limits.so
/etc/pam.d/login:session    required   pam_limits.so
/etc/pam.d/sudo:session required pam_limits.so
/etc/pam.d/cron:session    required   pam_limits.so
/etc/pam.d/su:# session    required   pam_limits.so

Для Debian нужно добавить строку session required pam_limits.so в /etc/pam.d/common-session

$ echo 'session required pam_limits.so' | sudo tee -a /etc/pam.d/common-session

Осталось поправить конфиг MySQL, чтобы сервер начал использовать новый лимит. Для этого в my.cnf в секцию [mysqld] добавляем строчку

open_files_limit = 4096

Комментариев нет:

Отправить комментарий