SystemdDoctor
служба не работает mysql нагрузка частое

MySQL: Too many connections

Сообщение Too many connections означает, что база достигла предела одновременных подключений. Служба при этом работает, но новые клиенты получают отказ. Причины делятся на две: предел действительно мал или соединения не закрываются.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Предел подключений мал для нагрузки

    Значение по умолчанию (обычно 151) рассчитано на скромное использование. Приложение с пулом соединений на несколько серверов исчерпывает его быстро.

  2. Приложение не закрывает соединения

    Утечка соединений выглядит как медленный рост числа подключений до предела. После перезапуска приложения всё приходит в норму — и это главный признак.

  3. Предел дескрипторов службы ниже числа соединений

    MySQL не сможет принять больше соединений, чем позволяет предел дескрипторов, даже если настройка базы разрешает.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Текущее и максимальное за время работы число соединений.

mysql -e "SHOW STATUS LIKE 'Threads_connected'; SHOW STATUS LIKE 'Max_used_connections';"

Кто именно держит соединения и в каком состоянии.

mysql -e 'SHOW PROCESSLIST;' | head -30

Предел дескрипторов службы.

systemctl show mysql -p LimitNOFILE

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Предел подключений мал для нагрузки
Почему происходит
Значение по умолчанию (обычно 151) рассчитано на скромное использование. Приложение с пулом соединений на несколько серверов исчерпывает его быстро.
Как проверить
Посмотрите предел и текущее число соединений.
mysql -e "SHOW VARIABLES LIKE 'max_connections'; SHOW STATUS LIKE 'Threads_connected';" 2>/dev/null
Как исправить
Поднимите предел и убедитесь, что предела дескрипторов у службы хватает: каждое соединение расходует дескриптор.
sudo systemctl edit mysql   # [Service]\nLimitNOFILE=65535
2. Приложение не закрывает соединения
Почему происходит
Утечка соединений выглядит как медленный рост числа подключений до предела. После перезапуска приложения всё приходит в норму — и это главный признак.
Как проверить
Посмотрите список соединений и их состояние.
mysql -e 'SHOW PROCESSLIST;' 2>/dev/null | head -20
Как исправить
Разбирайтесь с приложением: пул соединений должен переиспользовать подключения. Как временная мера помогает wait_timeout поменьше.
3. Предел дескрипторов службы ниже числа соединений
Почему происходит
MySQL не сможет принять больше соединений, чем позволяет предел дескрипторов, даже если настройка базы разрешает.
Как проверить
Сравните два предела.
systemctl show mysql -p LimitNOFILE
mysql -e "SHOW VARIABLES LIKE 'open_files_limit';" 2>/dev/null
Как исправить
Поднимите LimitNOFILE= в unit-файле: MySQL при старте подстраивает свой предел под системный.

Пример вывода

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

mysqld[1200]: [Warning] [MY-010055] [Server] IP address '<адрес>' could not be resolved
mysqld[1200]: [ERROR] [MY-010914] [Server] Too many connections
# со стороны приложения:
app[4100]: ERROR 1040 (HY000): Too many connections

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация MySQL: too many connections документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено при max_connections=5 и пуле приложения на 20 соединений.
    собственная проверка, systemd 255
    сверено 15 сентября 2026