Как исправить: mysql_connect(): Слишком много соединений

Я получаю следующую ошибку:

mysql_connect(): Too many connections

Он полностью отключил мой сайт, который работает без проблем в течение нескольких лет.

Примечание. У меня есть хостинг с GoDaddy.

Как это исправить?

ТАКЖЕ: существует ли способ закрыть все подключения и перезапустить их при использовании общего плана размещения?

Ответ 1

Скорее всего, вы были объектом атаки DDoS.

Люди на этом форуме жалуются на то же самое с точно таким же провайдером.

Ответ таков:

VB сказал мне, что это была атака DOS - вот их сообщение:

Это не "эксплойт". Это DoS-атака (отказ в обслуживании). К сожалению, мы ничего не можем с этим поделать. Атаки DoS можно вести только на уровне сервера или маршрутизатора, и ответственность за это несет ваш хост. Вместо этого они решили сделать простой выход и приостановить свою учетную запись.

Если вы не можете заставить их серьезно относиться к этому, вам следует искать другого хоста. Извините за плохие новости.

Возможным обходным решением может быть следующее: если ваше соединение не работает с mysql_connect(): Too many connections, вы не уходите, а вместо этого sleep() в течение половины секунды и пытаетесь подключиться снова и выходите только тогда, когда попытки 10 завершаются с ошибкой.

Это не решение, это обходное решение.

Это, конечно, задержит загрузку вашей страницы, но это лучше, чем уродливое сообщение too many connections.

Вы также можете использовать какой-то метод, который говорит обозревателям ботов и браузеров.

Как, установите соленое cookie SHA1, перенаправляйтесь на ту же страницу, а затем проверьте, что cookie и подключитесь к MySQL, только если пользовательский агент прошел тест.

Ответ 2

Это технический ответ

Вы получите эту ошибку "слишком много соединений" при подключении к MySQL, когда сервер MySQL достиг своего программного настраиваемого искусственного ограничения максимального числа одновременных клиентских подключений.

Итак, правильный способ исправить это:

  1. Непосредственно подключитесь к серверу MySQL и выполните запрос: SET GLOBAL max_connections = 1024;, чтобы изменить предел подключения во время выполнения (без простоя).
  2. Сделайте ваши изменения постоянными, отредактируйте файл /etc/my.cnf (или аналогичный) и добавьте строку строки max_connections = 1024 в раздел [mysqld]; затем перезапустите, если вы не смогли сделать живое изменение.

Выбранный предел 1024 был чисто субъективным; используйте любой предел, который вы хотите. Вы также можете проверить свой текущий лимит с помощью запроса SHOW VARIABLES LIKE "max_connections";. Имейте в виду, что эти ограничения существуют для хорошего использования, чтобы предотвратить ненужную перегрузку вашей базы данных. Поэтому всегда выбирайте разумные ограничения.

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

Как вы сказали, вы используете GoDaddy (я их не очень много знаю), у вас нет возможности связаться с вашим поставщиком услуг (то есть GoDaddy). Тем не менее, они также увидят это в своих журналах.

Возможные первопричины

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

Ответ 3

Завершите ли вы свое соединение, когда закончите с ними? Используете ли вы какой-то пул соединений? Похоже, вы открываете соединения и не закрываете их.

РЕДАКТИРОВАТЬ: Уже ответил Квасной. В случае, если это DDoS, и вы используете общий хостинг, вы можете просто связаться с вашим хостом и работать с ними. К сожалению, это риск, когда у вас нет контроля над всей вашей системой.

Ответ 4

Рассмотрим использование mysql_pconnect(). У вашего хоста может быть какая-то дросселировка для соединений. Как максимум 100 за 20 минут или что-то странное.

Ответ 5

Еще одна вещь, которая может вызвать эту ошибку, заключается в том, что в базе данных закончилось свободное пространство. В последнее время это произошло, и проблема была не в соединениях, а в дисковой памяти. Надеюсь, это поможет кому-то еще!