Назад | Перейти на главную страницу

Ошибка MySQL: слишком много подключений

С сегодняшнего дня у меня слишком много ошибок подключения на моем сайте ...

PDOException: SQLSTATE[08004] [1040] Too many connections in lock_may_be_available() (line 167 of /home/sevensibir/domains/7sib.ir/public_html/includes/lock.inc).

Я думаю, это атака, потому что когда я бегу mysqltuner.pl Я получил:

[!!] Highest connection usage: 100%  (152/151)

но я знаю, что у меня около 500 посещений в день. как я могу узнать, если это атака. и как мне это остановить?

Наверное, не нападение. Ваше приложение открывает слишком много подключений к MySQL. Это может быть результатом DDoS (или просто большого количества легитимного трафика). Однако более вероятно, что ваше приложение (Drupal) неправильно закрывает соединения. Возможно, он их вообще не закрывает (вы используете «постоянные» соединения? - если да, то нет) или просто занимает слишком много времени для завершения и, следовательно, слишком долго до закрытия соединения.

Вы можете читать журналы и видеть, откуда эти соединения поступают в журнале доступа вашего веб-сервера. Также убедитесь, что ваш mysql имеет достаточно высокое максимальное количество подключений (см. my.cnf и проверьте max_connections=).

Если вы все еще чувствуете, что вас атакуют, вы можете попробовать HIDS, например OSSEC. Он автоматически обнаруживает IP-адреса, которые делают слишком много запросов, чтобы быть людьми. Возможно, вам потребуется настроить это для вашего приложения.

PDOException = ваш сайт запрашивает много информации.

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

Чтобы узнать, есть ли атака на ваш сайт, вам нужно просмотреть журналы вашего сервера. Большинство людей недооценивают, какой трафик генерирует их сайт, когда их клиенты, Google, Yahoo, Bing, Baidu и Яндекс решают прочесать их сайт сразу. Да, это отказ в обслуживании мероприятие но не нападение.

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

Я думаю, что это атака, потому что когда я запускаю mysqltuner.pl, я получаю

Нет.

Здесь нет ничего, что могло бы подтвердить вашу гипотезу. Если вы не можете подтвердить, что этот уровень трафика был ненормальным, значит, у вас нет надлежащего мониторинга.

но я знаю, что у меня около 500 посещений в день

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

ПЕРВОЕ, что вам нужно сделать, это установить оборудование, чтобы иметь возможность быстро ответить на эти вопросы, после чего вы можете начать думать о мерах по обеспечению непрерывности обслуживания. Для предотвращения DOS есть много вещей, которые вы делаете с iptables, использование брандмауэра приложений или инструмента обратной связи, такого как fail2ban, полезно, но установка обратного прокси-сервера на основе событий будет иметь наибольшее влияние. Настройка вашего приложения, в частности запросов MySQL, должна дать гораздо большую производительность. Быстрое решение проблемы емкости - проверить, закрывает ли ваш PHP-код явно соединения mysql - если нет, то добавьте файл с автоматическим добавлением, который вызывает mysql_close () через register_shutdown_function ()