Главная > MySQL | Базы данных > Mysql error 1040: Too many connections

Mysql error 1040: Too many connections

13.02.2012 7 комментариев » Просмотры: 27 335

Что означает ошибка Mysql error 1040: Too many connections? Это ошибка означает, что в данный момент исчерпан лимит на подключение к БД.
Появляется обычно там, где либо слишком сложные запросы (которые долго выполняются), либо там где много одновременных подключений. Ну, например, от 100 пользователей инициирован одновременный запрос к БД, как например в моем варианте. Ясно, что такое в реальном использовании делать нельзя, но для сбора статистики, мне это было нужно. Итак, как же быть?

А все очень просто:

Вариант А
В случае медленных запросов, оптимизируем их, добавляем индексы и т.д.

Вариант Б
Одновременные соединения. В этом случае распределяем их на разное время запуска, чтобы они были выполнены не в одинаковое время. Т.е. убрать вот такие варианты:

А может быть оптимизация кода Вам не подойдет, тогда можно увеличить кол-во одновременных подключений. Это делается в файле конфигурации mysql, а именно /etc/my.cnf, вот в этой строчке:

Стандартное значение после установки 100. После внесения изменений, нужно рестартануть демона mysqld, делается это командой:

и теперь можно проверить, все ли ок, sql запросом:

Вот и всё. Не забывайте делать резервные копии перед внесением изменений в конфигурационные файлы!

Автор: | Рейтинг: 5/5 | Теги:

7 комментариев

Написать свой
  1. иван Ответить
    01.12.2015 в 9:54 дп
    скажите что это значет..Error MySQL: Too many connections
    • Vitaliy Orlov Ответить
      01.12.2015 в 11:23 дп
      MySQL - это программа с которой общаются через "соединения". Можешь представить себе это как окошки касс на вокзале, в которые стоят очереди людей. Так вот, когда много посетителей, заняты все соединения, (или в нашем примере, людей стало столько, что все не влезают в здание касс), MySQL пишет именно эту ошибку. Чтобы её избежать, надо увеличить максимальное кол-во соединений в настройках MySQL (увеличить кол-во окошек в кассах, чтобы обслуживать большей людей) или разобраться почему запросы выполняются так медленно (оптимизировать работу кассиров, чтобы пропускать больше народу в единицу времени). Думаю, теперь, должно быть яснее :)
  2. Руслан Ответить
    10.06.2013 в 2:19 дп
    Еще бывает просто место кончается. И MySQL выдает такую ошибку
    • Vitaliy Orlov Ответить
      10.06.2013 в 7:45 дп
      Не сталкивался с такой ошибкой, в случаях когда заканчивается место. Однако, если это действительно так, то можно в этом убедиться, посмотрев лог mysql-а. В случаях нехватки места, там точно будут ошибки, которые будут сообщать об этом. Для Debian и Ubuntu лог можно глянуть тут:

      # tail /var/log/mysql/errors.log
  3. Михаил Ответить
    21.09.2012 в 6:37 дп
    а может эта ошибка вылезать в случае dDOS атаки?
    • Vitaliy Orlov Ответить
      01.10.2012 в 6:34 пп
      Да, может. Но это очень легко проверить. Можно зайти например в phpMyAdmin или через саму консоль mysql, посмотреть список текущих процессов. Соотвественно, в случае DDOS-а мы увидим, очень много процессов в очереди. Дальше я обычно действую так, в точку входа (например index.php) я пишу просто скрипт который записывает ip всех текущих посетителей, построчно в файл:
      file_put_contents('ip.list', $_SERVER['REMOTE_ADDR'] , FILE_APPEND | LOCK_EX);
      оставляю так на 5 минут. Дальше отключаю запись в файл и смотрю какие ip-шники чаще всего дергают сайт. И дальше им можно отдать 503 ошибку или отправить на кешированные данные (на самом деле я записываю в файл не просто ip, а сериализированный массив, у которого ip является ключом, а значением является кол-во обращений, но этот код побольше, сюда пихать не буду). Только тут надо быть осторожным: можно забанить поисковики, если много инфы, особенно динамической, а сервер слабый. Поэтому, если ip-шник с которого "идет аттака" один или пара, то стоит посмотреть на кого он зарегистрирован через whois. И в случае если он зарегистрирован на Google, то не надо его банить, а следует добавить сайт в Google.Webmaster и ограничить там скорость сканирования или воспользоваться директивой Crwl-Delay в robots.txt.

Добавить комментарий для иван Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Разрешены HTML-теги: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>


Ниже приводятся ссылки на блоги ссылающиеся на этот пост:
  1. Pingback от Mysql too many connections Поснов Андрей 08.10.2013