🔌
Хостинг

Ошибка max_connections_per_hour: сайт выдаёт Database Error

08.11.2026
← Все статьи

Сайт, который ещё вчера работал нормально, вдруг показывает «Database Error» или «Error establishing a database connection», а через час сам восстанавливается. На следующий день всё повторяется. Одна из частых причин такой «плавающей» ошибки — почасовой лимит подключений, установленный для пользователя MySQL. В логах он виден под именем max_connections_per_hour, и если один раз разобраться в механизме, в следующий раз проблему можно определить за пару минут.

Что на самом деле означает ошибка 1226

MySQL позволяет задавать для каждого пользователя лимиты ресурсов: сколько запросов, изменений и новых подключений он может сделать за час. Если за час пользователь превысил разрешённое число подключений, сервер отклоняет новые соединения и возвращает сообщение:

ERROR 1226 (42000): User 'shop_user' has exceeded the
'max_connections_per_hour' resource (current value: 50)

Важно понимать, что лимит считает не одновременные подключения, а все подключения, открытые за час. На PHP-сайтах обычно каждое открытие страницы создаёт новое соединение с базой. Значит, при лимите 50 сайт перестаёт работать примерно после 50 просмотров страниц в час. Счётчик обнуляется по истечении часа, поэтому кажется, что ошибка прошла сама, но с возвращением трафика она появляется снова.

Как отличить её от других ошибок подключения

У MySQL есть несколько похожих ошибок подключения, и путать их не стоит, потому что решения разные. 1226 означает, что исчерпана почасовая квота. Ошибка 1203, то есть max_user_connections, говорит о превышении числа одновременных соединений пользователя. 1040 Too many connections означает, что заполнен общий лимит всего сервера, и обычно это не связано с одним пользователем. При неверном пароле или имени пользователя появляется 1045 Access denied.

Посетителю сайт чаще всего показывает только общую страницу «ошибка базы данных», а точный код записывается в лог ошибок PHP или в собственный лог сайта. Открыть раздел логов в панели хостинга или файл error_log в папке сайта и найти код ошибки — первый шаг диагностики.

Проверка текущих лимитов

Если у вас есть административный доступ к MySQL, например на собственном VPS, лимиты пользователя можно посмотреть в таблице mysql.user. Столбец max_connections хранит именно почасовой лимит подключений, а max_user_connections отвечает за одновременные соединения. Значение 0 означает отсутствие лимита:

SELECT user, host, max_questions, max_updates,
       max_connections, max_user_connections
FROM mysql.user
WHERE user = 'shop_user';

На виртуальном хостинге обычный пользователь доступа к этой таблице не имеет. В этом случае значение лимита и возможность его изменить нужно уточнить у технической поддержки хостинга.

Увеличение лимита и сброс счётчика

Администратор сервера меняет лимит командой ALTER USER. Для современных сайтов 50 подключений в час — очень мало, поэтому обычная практика — поднять значение до тысяч или снять ограничение совсем. Чтобы сразу обнулить счётчик после изменения, используется FLUSH USER_RESOURCES, иначе придётся ждать окончания текущего часа:

ALTER USER 'shop_user'@'localhost'
  WITH MAX_CONNECTIONS_PER_HOUR 20000;
FLUSH USER_RESOURCES;

Чтобы полностью снять ограничение, указывают значение 0. Но на виртуальном хостинге лимиты нужны ещё и для того, чтобы один клиент не занял весь сервер, поэтому чаще выбирают не безлимит, а высокое значение с запасом под реальный трафик сайта. На своём VPS это решение принимаете вы сами.

Как уменьшить число подключений

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

Пример из практики: обеденные сбои сайта клиники

Сайт частной клиники в Самарканде example.uz каждый день ближе к обеду примерно на час переставал работать. Именно в это время чаще всего использовались расписание приёма врачей и форма онлайн-записи, а администратор считал, что виноват медленный хостинг. В логе ошибок PHP нашлись подряд идущие записи с кодом 1226, а журнал доступа показал несколько сотен открытых страниц за час — намного больше лимита в 50.

Техподдержка подняла лимит пользователя до значения, соответствующего масштабу сайта, и сбросила счётчик. Владелец сайта включил кеш страниц и перевёл задание обновления расписания с каждой минуты на каждые десять минут. В итоге ошибка полностью исчезла, а страницы стали открываться быстрее. На хостинге sayt.uz в такой ситуации достаточно открыть тикет в кабинете и указать код ошибки.

Чтобы проблема не вернулась

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

Похожие статьи

🤖 Python-бот 24/7: запуск через systemd и PM2 🧠 Нехватка памяти (OOM): почему завершаются процессы PHP и Python 🧠 «Allowed memory size exhausted»: ошибка памяти PHP и как её правильно решить 🚀 Полностраничный кеш: когда он полезен, а когда мешает
🌐 Язык
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский ✓ 🇬🇧 English