Main > Databases | MySQL > Mysql error 1040: Too many connections

Mysql error 1040: Too many connections

13.02.2012 7 comments » Views: 27,335

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

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

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

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

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

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

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

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

Author: | Rating: 5/5 | Tags:

7 comments.

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

      # tail /var/log/mysql/errors.log
  3. Михаил Reply
    21.09.2012 в 6:37 am
    а может эта ошибка вылезать в случае dDOS атаки?
    • Vitaliy Orlov Reply
      01.10.2012 в 6:34 pm
      Да, может. Но это очень легко проверить. Можно зайти например в 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.

Leave a Reply to Vitaliy Orlov Cancel reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>


Links to this post:
  1. Pingback from Mysql too many connections Поснов Андрей 08.10.2013