Home » Полезные советы » MySQL — [Warning] Changed limits: max_open_files, table_open_cache

MySQL — [Warning] Changed limits: max_open_files, table_open_cache

Практически всегда сталкиваюсь с предупреждением Mysql сервера, когда оптимизирую работу сайтов на Bitrix, работающих в окружении bitrixenv. Подробно об этом я рассказывал в отдельной статье — оптимизация настроек сервера под сайт на bitrix. Там я забыл описать один важный момент, который относится к параметрам max_open_files и table_open_cache.

Если у вас есть желание научиться работать с роутерами микротик и стать специалистом в этой области, рекомендую по программе, основанной на информации из официального курса MikroTik Certified Network Associate. Курс стоящий, все подробности читайте по ссылке. Есть бесплатные курсы.

В качестве примера я возьму сервер на базе Centos 7, на котором установлено окружение Bitrixenv. Но принципиального значения это не имеет, так как данная ошибка исправляется примерно одинаково во всех дистрибутивах. Итак, о чем пойдет речь. В настройках Mysql сервера есть два очень важных параметра, которые влияют на его производительность:

  • table_open_cache
  • open_files_limit

Какие значения нужно выбирать, тема отдельной статьи и сильно зависит от конкретной ситуации, так что сейчас не об этом. Допустим, вы выставили эти значения в 15000 и 30000 соответственно. При запуске Mysql сервера вы увидите в логе для ошибок следующие строки:

[Warning] Changed limits: max_open_files: 5000 (requested 30000)
[Warning] Changed limits: table_open_cache: 2452 (requested 15000)

Mysql сервер не может выставить указанные параметры. Причина этого — лимит операционной системы для конкретного процесса, в данном случае mysql. Посмотреть его лимиты можно командой:

# cat /proc/$(pgrep mysqld)/limits

Changed limits: max_open_files

Bitrixenv ставит значение Max open files в 5000 для службы базы данных. По дефолту в Centos 7 оно равно 1024 на процесс. Нам этого мало, поэтому увеличиваем его конкретно для mysql до 65535. Для этого создаем отдельный конфиг в systemd для службы mysql.

# mkdir /etc/systemd/system/mysqld.service.d
# touch limit.conf

Содержимое файла очень простое:

[Service]
LimitNOFILE=65535

Объясняю, почему мы сделали именно так. По идее, можно было бы просто отредактировать файл /etc/systemd/system/mysql.service. Там уже есть параметр LimitNOFILE и ему указано значение 5000. Но если мы отредактируем его, то изменение будет сброшено при очередном обновлении mysql сервера. А создав отдельный внешний конфиг для службы, мы обезопасили его от изменения. Теперь можно спокойно обновляться, установленный параметр никуда не денется.

Так же можно было изменить системные лимиты для всех процессов разом, через указание нужного параметра в конфигурационном файле /etc/security/limits.conf. До появления systemd так обычно и делали. С появлением последнего управлять лимитами для процессов стало проще, поэтому лучше настраивать все точечно именно там, где это необходимо.

После изменения конфигурационных файлов systemd, надо перечитать настройки:

# systemctl daemon-reload

И перезапускаем Mysql для применения изменений в самой службе.

# systemctl restart mysql

Проверяйте лог mysql. Больше предупреждения на тему Changed limits быть не должно. Смотрим.

Changed limits: table_open_cache

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Администратор Linux» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров. Что даст вам этот курс:
  • Знание архитектуры Linux.
  • Освоение современных методов и инструментов анализа и обработки данных.
  • Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
  • Владение основными рабочими инструментами системного администратора.
  • Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
  • Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

2 комментария

  1. Аватар

    у вас опечатка mkdir etc/systemd/system/mysqld.service.d

Добавить комментарий

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.