В высоко нагруженных системах по мере роста нагрузки на сервер MySQL возможно возникновение ситуации, когда выделенных ресурсов будет не достаточно, хотя аппаратно сервер может быть достаточно мощным.
В частности в логах сервера MySQL при запуске можно наблюдать следующие строки:
[Warning] Buffered warning: Changed limits: max_open_files: 1024 (requested 10460)
[Warning] Buffered warning: Changed limits: max_connections: 214 (requested 450)
[Warning] Buffered warning: Changed limits: table_open_cache: 400 (requested 5000)
Эти сообщения говорят о недостаточности выделенных ресурсов серверу. Основной проблемой является ограничение max_open_files которое составляет 1024, а увеличение этого параметра в настройках сервера my.cnf не приводит к желаемому результату.
Эту проблему можно решить так:
Шаг 1: Определим текущие ограничения
количество максимально открытых файлов (1024) для одного процесса (mysql). Для этого из под пользователя root выполняем следующую команду:
# ulimit -a | grep open open files (-n) 1024
для сервера MySQL необходимо залогиниться пользователем root и выполнить:
# mysql -u root -p mysql> SHOW VARIABLES LIKE 'open%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | open_files_limit |1024 | +------------------+-------+ 1 row in set (0.00 sec)
Шаг 2: Исправляем
В файл /etc/security/limits.conf добавляем следующие строки:
mysql soft nofile 65535 mysql hard nofile 65535
В файл /etc/pam.d/common-session, в конец добавляем строку:
session required pam_limits.so
В файл /etc/pam.d/common-session-noninteractive, в конец добавляем строку:
session required pam_limits.so
В файл /etc/my.cnf, в секцию [mysqld], добавляем строку:
open_files_limit = 1024000
Перезапускаем сервер
Шаг 3: Проверяем:
# ulimit -a | grep open open files (-n) 102400
SHOW VARIABLES LIKE 'open%';