Как исправить: 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 достиг своего программного настраиваемого искусственного ограничения максимального числа одновременных клиентских подключений.
Итак, правильный способ исправить это:
- Непосредственно подключитесь к серверу MySQL и выполните запрос:
SET GLOBAL max_connections = 1024;
, чтобы изменить предел подключения во время выполнения (без простоя).
- Сделайте ваши изменения постоянными, отредактируйте файл /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
Еще одна вещь, которая может вызвать эту ошибку, заключается в том, что в базе данных закончилось свободное пространство. В последнее время это произошло, и проблема была не в соединениях, а в дисковой памяти. Надеюсь, это поможет кому-то еще!